// 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.control;

using zx;

[Transport = "Banjo", BanjoLayout = "ddk-protocol"]
protocol GoldfishControl {
    /// Get color buffer for VMO. Fails if VMO is not associated with a color
    /// buffer.
    GetColorBuffer(zx.handle:VMO vmo) -> (zx.status ret, uint32 cb);

    /// Create a sync fence on goldfish control device. The fence `event`
    /// argument will signal its peer once all the graphics work already queued
    /// on the EGL display context associated with the device when it is created
    /// has finished.
    /// Returns ZX_ERR_INTERNAL if the device cannot create a fence or cannot
    /// trigger the wait.
    CreateSyncFence(zx.handle:EVENTPAIR event) -> (zx.status ret);
};
