blob: e7ce05084bc3c00141f490ae31c413dd651ad72f [file] [log] [blame]
// 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;
type Features = flexible bits {
/// Implements Get().
GET = 1;
/// Implements ConnectToDeviceFs().
CONNECT_TO_DEVICE_FS = 2;
/// Implements ConnectToManifestFs().
CONNECT_TO_MANIFEST_FS = 4;
};
type ConnectToManifestOptions = flexible bits {
/// Wait for the loader to finish processing current ICD loading/unloading
/// operations before completing the connection.
WAIT_FOR_IDLE = 1;
};
/// Service to provide Vulkan libraries to the loader.
@discoverable
@for_deprecated_c_bindings
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(struct {
name string:64;
}) -> (resource struct {
lib zx.handle:<VMO, optional>;
});
/// Connects to a FS serving fuchsia.io containing all Vulkan ICD manifests.
/// See
/// <https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md#icd-manifest-file-format>
/// for a description of the manifest file format. Manifests will always
/// appear in this directory after the relevant device appears in
/// `ConnectToDeviceFs()`.
ConnectToManifestFs(resource struct {
options ConnectToManifestOptions;
channel zx.handle:CHANNEL;
});
/// 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(resource struct {
channel zx.handle:CHANNEL;
});
/// Returns the set of features the loader service supports.
GetSupportedFeatures() -> (struct {
features Features;
});
};