blob: 550b7e8373ffa90b4a0051700668f08bbdb3f775 [file]
// Copyright 2020 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
include "iree/schemas/executable_debug_info.fbs";
namespace iree.hal.metal;
// 'Metal v1 Executable'.
file_identifier "MTL1";
file_extension "mtl1";
// Defines the threadgroup size along each dimension.
struct ThreadgroupSize {
x:uint32;
y:uint32;
z:uint32;
}
// Describes the behavior of each buffer binding.
// Used to populate MTLPipelineBufferDescriptor.
enum BindingBits:uint64 (bit_flags) {
IMMUTABLE = 0, // 1u << 0
}
// A compute pipeline (roughly MTLComputePipelineDescriptor).
table PipelineDef {
// Ordinal of the MTLLibrary containing the entry point in the executable
// libraries list.
library_ordinal:uint32;
// String name of the entry point MTLFunction in the library. This is the MSL
// function name produced by spirv-cross, which rewrites symbols that are
// illegal or reserved in MSL/C (for example '.' characters become '_' and a
// leading reserved '__' prefix is dropped). Used to construct the
// MTLComputePipelineState via -[MTLLibrary newFunctionWithName:].
entry_point:string;
// The maximum number of threads in a threadgroup that can be dispatched to
// the compute function. Omit for the default as determined at runtime.
// See: maxTotalThreadsPerThreadgroup
max_threads_per_threadgroup:uint32;
// Threadgroup size passed to dispatch commands.
threadgroup_size:ThreadgroupSize;
// Indicates whether the threadgroup size is always a multiple of the thread
// execution width.
// See: threadGroupSizeIsMultipleOfThreadExecutionWidth
threadgroup_size_aligned:bool;
// Total count in 32-bit words of constants passed to dispatch operations.
constant_count:uint32;
// Buffers used by the pipeline in the order as passed to dispatch operations.
binding_flags:[BindingBits];
// Optional debug information related to the export.
debug_info:iree.hal.debug.ExportDef;
// Canonical hal.executable.export symbol name used by the runtime to look up
// the export by name (hal.executable.lookup.function). This carries the
// original, un-rewritten name and may differ from entry_point because MSL
// cannot represent all legal symbol names; dispatch lookups must match it.
name:string;
}
// MSL (Metal Shading Language) source code.
table MSLSourceDef {
// MTLLanguageVersion enum indicating the version to interpret the code as.
// When omitted the default (latest) version will be used.
version:uint32;
// Source text.
code:string;
// TODO: add compilation options we want to control from the compiler:
// https://developer.apple.com/documentation/metal/mtlcompileoptions/4354201-mathmode
// https://developer.apple.com/documentation/metal/mtlcompileoptions/4354200-mathfloatingpointfunctions
// https://developer.apple.com/documentation/metal/mtlcompileoptions/3564462-preserveinvariance
}
// A MTLLibrary containing one or more functions.
table LibraryDef {
// Optional MSL (Metal Shading Language) textual source code.
// May be provided even if metallib binaries are present in order to support
// fallback compilation on new devices.
source:MSLSourceDef;
// Precompiled Metal library.
// https://developer.apple.com/documentation/metal/shader_libraries/metal_libraries/building_a_shader_library_by_precompiling_source_files
metallib:string;
// Split debug symbols for the precompiled Metal library.
// https://developer.apple.com/documentation/metal/shader_libraries/metal_libraries/generating_and_loading_a_metal_library_symbol_file
metallibsym:string;
}
// A Metal shader library and runtime pipeline state description.
// This information is used to create MTLLibrary, MTLFunction and pipeline
// state objects.
table ExecutableDef {
// Exported functions in canonical executable entry point order.
// Each creates a single MTLComputePipelineState.
pipelines:[PipelineDef];
// A list of libraries hosting various entry points. Each library contains at
// least one entry point.
// This list may not have the same size as the exports list.
libraries:[LibraryDef];
// Embedded source files sorted ascending by path.
source_files:[iree.hal.debug.SourceFileDef];
}
root_type ExecutableDef;