170 lines
3.4 KiB
Plaintext
170 lines
3.4 KiB
Plaintext
// 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;
|