blob: ce863e6d8fcd6db3909799cde7d37c2b3579f192 [file] [log] [blame]
// Copyright 2023 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.hardware.display.types;
/// Specifies how individual pixels are arranged in an image buffer.
///
/// The tiling format influences other image parameters, such as dimensions
/// and pixel format, that are supported by the display engines. Display engine
/// drivers currently express this knowledge by setting buffer constraints in
/// sysmem, and by rejecting invalid combinations.
///
/// Values other than [`IMAGE_TILING_TYPE_LINEAR`] and
/// [`IMAGE_TILING_TYPE_CAPTURE`] are an escape hatch. The driver and image
/// producer are responsible for agreeing on the meaning of the value, through
/// some mechanism outside the scope of this API.
alias ImageTilingTypeIdValue = uint32;
/// Equivalent to Vulkan's linear tiling.
///
/// Pixels are arranged in the image buffer in row-major order. Each row may
/// have some padding bytes.
///
/// Default for [`ImageTilingTypeIdValue`].
const IMAGE_TILING_TYPE_LINEAR ImageTilingTypeIdValue = 0;
// The gap between IMAGE_TILING_TYPE_LINEAR and IMAGE_TILING_TYPE_CAPTURE can be
// used for platform-specific / driver-specific formats. Eventually, this magic
// will be replaced by better primitives for discovering and negotiating image
// contracts.
/// The tiling used by the display engine's capture feature.
///
/// This value is used as a signal that the image buffer will used by the
/// display engine to store displayed contents, and therefore is a slight abuse
/// of the "tiling" semantics.
///
/// Like every other tiling value, this introduces constraints on image
/// parameters such as dimensions and pixel format.
const IMAGE_TILING_TYPE_CAPTURE ImageTilingTypeIdValue = 10;
// The signal provided by IMAGE_TILING_TYPE_CAPTURE will be moved elsewhere in a
// future revision of this API.
/// The intended usage for a sysmem BufferCollection holding image buffers.
///
/// Each buffer in the collection will store a single image, which is intended
/// to be used as described below.
type ImageBufferUsage = struct {
/// Specifies how individual pixels are arranged in an image buffer.
///
/// See [`fuchsia.hardware.display.types/ImageTilingTypeIdValue`].
tiling_type uint32;
};
/// Describes how an image is stored in a buffer of a sysmem BufferCollection.
///
/// The buffer is dedicated to storing a single image. The properties below are
/// needed for decoding the image from the buffer.
// TODO(https://fxbug.dev/329163718): sysmem already has some of the information
// here. Prune this structure, replacing members with querying properties on the
// associated sysmem BufferCollection.
type ImageMetadata = struct {
/// The width and height of the image in pixels.
width uint32;
height uint32;
/// Specifies how individual pixels are arranged in an image buffer.
///
/// See [`fuchsia.hardware.display.types/ImageTilingTypeIdValue`].
tiling_type uint32;
};