// 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.vulkan.loader;

using zx;

flexible bits Features {
    /// Implements Get().
    GET = 1;
    /// Implements ConnectToDeviceFs().
    CONNECT_TO_DEVICE_FS = 2;
};

/// Service to provide Vulkan libraries to the loader.
[Discoverable, ForDeprecatedCBindings]
protocol Loader {
    /// Requests a client driver library with the given name from the Vulkan loader
    /// service. Returns a VMO suitable for loading as a dynamic library on
    /// success, a null handle on failure.
    Get(string:64 name) -> (zx.handle:VMO? lib);

    /// Connects to a FS serving fuchsia.io containing all device nodes
    /// potentially relevant to ICDs.  /dev/<devname> will be served under
    /// <devname> in this directory.
    ConnectToDeviceFs(zx.handle:CHANNEL channel);

    /// Returns the set of features the loader service supports.
    GetSupportedFeatures() -> (Features features);
};
