// Copyright 2018 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.sysmem;

// TODO(fxbug.dev/32119): change struct to table
/// Describes how an image is represented.
@for_deprecated_c_bindings
type ImageFormat = struct {
    /// Row width in pixels.
    width uint32;

    /// Number of rows.
    height uint32;

    /// Number of layers within a multi-layered image.
    /// Defaults to 1 if not specified.
    layers uint32 = 1;

    /// Pixel format.
    pixel_format PixelFormat;

    /// Color space.
    color_space ColorSpace;

    planes array<ImagePlane, 4>;
};

@for_deprecated_c_bindings
type ImagePlane = struct {
    /// Byte offset of the start of the plane from the beginning of the image.
    byte_offset uint32;

    /// Stride in bytes per row.
    /// Only meaningful for linear buffer formats.
    bytes_per_row uint32;
};

/// Describes constraints for allocating images of some desired form.
// TODO(fxbug.dev/32119): change struct to table
type ImageSpec = struct {
    /// Minimum width in pixels.
    min_width uint32;

    /// Minimum height in pixels.
    min_height uint32;

    /// Number of layers within a multi-layered image.
    /// Defaults to 1 if not specified.
    layers uint32 = 1;

    /// Pixel format.
    pixel_format PixelFormat;

    /// Color space.
    color_space ColorSpace;

// TODO(fxbug.dev/32128): Add tiling formats.
};
