blob: f25f90266293656b472a87dd5b253552040830d5 [file] [log] [blame]
// Copyright 2019 The TensorFlow Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
include "common.fbs";
namespace tflite.gpu.gl.data;
file_identifier "AFCM";
file_extension "flow";
// Encapsulates entire OpenGL program with all necessary dependencies and
// parameters.
table Program {
// A collection of objects this program refers to.
objects:[Object];
// Uniform parameters to be set before execution.
parameters:[UniformParameter];
// Defines the number of work groups.
number_workgroups:Uint3;
// Defines the size of a workgroup.
workgroup_size:Uint3;
// Reference to a shader in this compiled model.
shader_index:uint32;
// Contains binary code that was once created after successful shader
// compilation. Normally it is much faster to instantiate a program from
// compiled binary.
binary:ProgramBinary;
}
// Compiled binary representation of a program.
table ProgramBinary {
format:uint32; // GLenum
// Compiled binary shader blob extracted from GL.
binary:[ubyte];
}
enum ParameterType : byte {
INT32 = 0,
UINT32 = 1,
FLOAT32 = 2,
INT32_2 = 3,
}
enum DataType : byte {
UNKNOWN = 0,
FLOAT32 = 1,
FLOAT16 = 2,
INT32 = 3,
INT16 = 4,
}
union DataVariant {
DataInt32,
DataFloat,
DataUint32,
}
table DataFloat {
data:[float];
}
table DataInt32 {
data:[int32];
}
table DataUint32 {
data:[uint32];
}
table UniformParameter {
name:string;
type:ParameterType;
// Data is optional. If it is known in advance, it is encoded here, otherwise
// a parameter will be set in runtime.
data:DataVariant;
}
enum AccessType : byte {
READ = 0,
WRITE = 1,
READ_WRITE = 2,
}
enum ObjectType : byte {
UNKNOWN = 0,
BUFFER = 1,
TEXTURE = 2,
}
union ObjectVariant {
ObjectData,
ObjectRef,
}
union ObjectSize {
Uint1,
Uint2,
Uint3,
}
table Object {
access:AccessType;
binding:uint32;
data_type:DataType;
type:ObjectType;
size:ObjectSize;
object:ObjectVariant;
}
// Represents a reference to another object provided by object manager.
table ObjectRef {
// Unique global identifier to be used by an object manager to lookup this
// buffer.
global_id:uint32;
}
table ObjectData {
data:[uint8];
}
// Represents entire model as a collection of programs, inputs and outputs.
table CompiledModel {
parameters:Parameters;
// A collection of shaders used by programs.
shaders:[string];
// A collection of programs that need to be executed in the same order.
programs:[Program];
}
table Parameters {
// indicated flow engine version that compiled this model. If engine version
// does not match compiled model, then a model need to be recompiled.
// version:uint32; // not implemented
// Could potentially be used to track environment when a model was compiled
// and detect whether it was changed and model recompilation is needed.
// environment_hash:uint32; // not implemented
dynamic_batch:bool;
}
root_type CompiledModel;