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

// TODO(fxb/39732): This should be read as "library zx".
library zz;

[Transport = "Syscall"]
protocol framebuffer {
    /// Rights: resource must have resource kind ZX_RSRC_KIND_ROOT.
    framebuffer_get_info(handle<resource> resource)
        -> (status status, uint32 format, uint32 width, uint32 height, uint32 stride);

    // TODO(ZX-2967): vmo ZX_OBJ_TYPE_VMO; No rights required?
    /// Rights: resource must have resource kind ZX_RSRC_KIND_ROOT.
    framebuffer_set_range(handle<resource> resource,
                          handle<vmo> vmo,
                          uint32 len,
                          uint32 format,
                          uint32 width,
                          uint32 height,
                          uint32 stride)
        -> (status status);
};
