// 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.
    @allow_deprecated_struct_defaults
    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.
    @allow_deprecated_struct_defaults
    layers uint32 = 1;

    /// Pixel format.
    pixel_format PixelFormat;

    /// Color space.
    color_space ColorSpace;

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