// Copyright 2019 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.goldfish;

using zx;

/// Color buffer formats.
enum ColorBufferFormatType : uint32 {
    RGBA = 0x1908;
    BGRA = 0x80E1;
};

/// Interface for the Goldfish control driver providing color buffers.
[Layout = "Simple"]
protocol ControlDevice {
    /// Create shared color buffer. Color buffer is automatically freed when
    /// all references to `vmo` have been closed. Fails if VMO is not
    /// associated with goldfish heap memory.
    /// Returns ZX_ERR_ALREADY_EXISTS if color buffer has already been created.
    CreateColorBuffer(handle<vmo> vmo,
                      uint32 width,
                      uint32 height,
                      ColorBufferFormatType format)
        -> (zx.status res);

    /// Get color buffer for VMO. Fails if VMO is not associated with a color
    /// buffer.
    GetColorBuffer(handle<vmo> vmo) -> (zx.status res, uint32 id);
};
