xref: /aosp_15_r20/external/executorch/backends/vulkan/serialization/schema.fbs (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Worker// Copyright (c) Meta Platforms, Inc. and affiliates.
2*523fa7a6SAndroid Build Coastguard Worker
3*523fa7a6SAndroid Build Coastguard Workernamespace vkgraph;
4*523fa7a6SAndroid Build Coastguard Worker
5*523fa7a6SAndroid Build Coastguard Worker// Update after any BC breaking changes.
6*523fa7a6SAndroid Build Coastguard Workerfile_identifier "VK00";
7*523fa7a6SAndroid Build Coastguard Worker
8*523fa7a6SAndroid Build Coastguard Workertable OperatorCall {
9*523fa7a6SAndroid Build Coastguard Worker  node_id:uint;
10*523fa7a6SAndroid Build Coastguard Worker  name:string;
11*523fa7a6SAndroid Build Coastguard Worker  args:[int];
12*523fa7a6SAndroid Build Coastguard Worker}
13*523fa7a6SAndroid Build Coastguard Worker
14*523fa7a6SAndroid Build Coastguard Workerenum VkDataType : byte {
15*523fa7a6SAndroid Build Coastguard Worker  BOOL = 0,
16*523fa7a6SAndroid Build Coastguard Worker  UINT8 = 1,
17*523fa7a6SAndroid Build Coastguard Worker  INT8 = 2,
18*523fa7a6SAndroid Build Coastguard Worker  INT32 = 3,
19*523fa7a6SAndroid Build Coastguard Worker  FLOAT16 = 4,
20*523fa7a6SAndroid Build Coastguard Worker  FLOAT32 = 5,
21*523fa7a6SAndroid Build Coastguard Worker}
22*523fa7a6SAndroid Build Coastguard Worker
23*523fa7a6SAndroid Build Coastguard Worker// Describes what kind of GPU resource should be used to represent a tensor. The
24*523fa7a6SAndroid Build Coastguard Worker// int values assigned to each entry must match the corresponding entry in
25*523fa7a6SAndroid Build Coastguard Worker// api::StorageType.
26*523fa7a6SAndroid Build Coastguard Workerenum VkStorageType : ubyte {
27*523fa7a6SAndroid Build Coastguard Worker  BUFFER = 0,
28*523fa7a6SAndroid Build Coastguard Worker  TEXTURE_3D = 1,
29*523fa7a6SAndroid Build Coastguard Worker  TEXTURE_2D = 2,
30*523fa7a6SAndroid Build Coastguard Worker  DEFAULT_STORAGE = 255,
31*523fa7a6SAndroid Build Coastguard Worker}
32*523fa7a6SAndroid Build Coastguard Worker
33*523fa7a6SAndroid Build Coastguard Worker// Describes how memory should be laid out in GPU memory. See the GPUMemoryLayout
34*523fa7a6SAndroid Build Coastguard Worker// enum class in PyTorch Vulkan for more details. The int values assigned to each
35*523fa7a6SAndroid Build Coastguard Worker// entry must match the corresponding entry in utils::GPUMemoryLayout.
36*523fa7a6SAndroid Build Coastguard Workerenum VkMemoryLayout : ubyte {
37*523fa7a6SAndroid Build Coastguard Worker  TENSOR_WIDTH_PACKED = 0,
38*523fa7a6SAndroid Build Coastguard Worker  TENSOR_HEIGHT_PACKED = 1,
39*523fa7a6SAndroid Build Coastguard Worker  TENSOR_CHANNELS_PACKED = 2,
40*523fa7a6SAndroid Build Coastguard Worker  DEFAULT_LAYOUT = 255,
41*523fa7a6SAndroid Build Coastguard Worker}
42*523fa7a6SAndroid Build Coastguard Worker
43*523fa7a6SAndroid Build Coastguard Workertable VkTensor {
44*523fa7a6SAndroid Build Coastguard Worker  // Type of the tensor elements.
45*523fa7a6SAndroid Build Coastguard Worker  datatype:VkDataType;
46*523fa7a6SAndroid Build Coastguard Worker  // Shape dimensions.
47*523fa7a6SAndroid Build Coastguard Worker  dims:[uint];
48*523fa7a6SAndroid Build Coastguard Worker  // Index to the program's constant data. Negative indicates tensor is non-constant.
49*523fa7a6SAndroid Build Coastguard Worker  constant_id:int;
50*523fa7a6SAndroid Build Coastguard Worker  // Index to the shared memory object. Negative indicates the tensor doesn't share memory.
51*523fa7a6SAndroid Build Coastguard Worker  mem_obj_id:int;
52*523fa7a6SAndroid Build Coastguard Worker  // Storage type that should be used to represent this tensor
53*523fa7a6SAndroid Build Coastguard Worker  storage_type:VkStorageType = DEFAULT_STORAGE;
54*523fa7a6SAndroid Build Coastguard Worker  // Memory layout that should be used to represent this tensor
55*523fa7a6SAndroid Build Coastguard Worker  memory_layout:VkMemoryLayout = DEFAULT_LAYOUT;
56*523fa7a6SAndroid Build Coastguard Worker}
57*523fa7a6SAndroid Build Coastguard Worker
58*523fa7a6SAndroid Build Coastguard Workertable Null {}
59*523fa7a6SAndroid Build Coastguard Worker
60*523fa7a6SAndroid Build Coastguard Workertable Int {
61*523fa7a6SAndroid Build Coastguard Worker  int_val:long;
62*523fa7a6SAndroid Build Coastguard Worker}
63*523fa7a6SAndroid Build Coastguard Worker
64*523fa7a6SAndroid Build Coastguard Workertable Bool {
65*523fa7a6SAndroid Build Coastguard Worker  bool_val:bool;
66*523fa7a6SAndroid Build Coastguard Worker}
67*523fa7a6SAndroid Build Coastguard Worker
68*523fa7a6SAndroid Build Coastguard Workertable Double {
69*523fa7a6SAndroid Build Coastguard Worker  double_val:double;
70*523fa7a6SAndroid Build Coastguard Worker}
71*523fa7a6SAndroid Build Coastguard Worker
72*523fa7a6SAndroid Build Coastguard Workertable String {
73*523fa7a6SAndroid Build Coastguard Worker  string_val:string;
74*523fa7a6SAndroid Build Coastguard Worker}
75*523fa7a6SAndroid Build Coastguard Worker
76*523fa7a6SAndroid Build Coastguard Workertable IntList {
77*523fa7a6SAndroid Build Coastguard Worker  items:[long];
78*523fa7a6SAndroid Build Coastguard Worker}
79*523fa7a6SAndroid Build Coastguard Worker
80*523fa7a6SAndroid Build Coastguard Workertable DoubleList {
81*523fa7a6SAndroid Build Coastguard Worker  items:[double];
82*523fa7a6SAndroid Build Coastguard Worker}
83*523fa7a6SAndroid Build Coastguard Worker
84*523fa7a6SAndroid Build Coastguard Workertable BoolList {
85*523fa7a6SAndroid Build Coastguard Worker  items:[bool];
86*523fa7a6SAndroid Build Coastguard Worker}
87*523fa7a6SAndroid Build Coastguard Worker
88*523fa7a6SAndroid Build Coastguard Workertable ValueList {
89*523fa7a6SAndroid Build Coastguard Worker  items:[int];
90*523fa7a6SAndroid Build Coastguard Worker}
91*523fa7a6SAndroid Build Coastguard Worker
92*523fa7a6SAndroid Build Coastguard Workertable SymInt {
93*523fa7a6SAndroid Build Coastguard Worker  value:int;
94*523fa7a6SAndroid Build Coastguard Worker}
95*523fa7a6SAndroid Build Coastguard Worker
96*523fa7a6SAndroid Build Coastguard Workerunion GraphTypes {
97*523fa7a6SAndroid Build Coastguard Worker  Null,
98*523fa7a6SAndroid Build Coastguard Worker  Int,
99*523fa7a6SAndroid Build Coastguard Worker  Double,
100*523fa7a6SAndroid Build Coastguard Worker  Bool,
101*523fa7a6SAndroid Build Coastguard Worker  VkTensor,
102*523fa7a6SAndroid Build Coastguard Worker  IntList,
103*523fa7a6SAndroid Build Coastguard Worker  DoubleList,
104*523fa7a6SAndroid Build Coastguard Worker  BoolList,
105*523fa7a6SAndroid Build Coastguard Worker  ValueList,
106*523fa7a6SAndroid Build Coastguard Worker  String,
107*523fa7a6SAndroid Build Coastguard Worker  SymInt,
108*523fa7a6SAndroid Build Coastguard Worker}
109*523fa7a6SAndroid Build Coastguard Worker
110*523fa7a6SAndroid Build Coastguard Workertable VkValue {
111*523fa7a6SAndroid Build Coastguard Worker  value:GraphTypes;
112*523fa7a6SAndroid Build Coastguard Worker}
113*523fa7a6SAndroid Build Coastguard Worker
114*523fa7a6SAndroid Build Coastguard Worker// Abstraction to represent a region of bytes in a raw data buffer. Useful for referencing raw data
115*523fa7a6SAndroid Build Coastguard Worker// serialized outside of the flatbuffer.
116*523fa7a6SAndroid Build Coastguard Workertable VkBytes {
117*523fa7a6SAndroid Build Coastguard Worker  offset:ulong;
118*523fa7a6SAndroid Build Coastguard Worker  length:ulong;
119*523fa7a6SAndroid Build Coastguard Worker}
120*523fa7a6SAndroid Build Coastguard Worker
121*523fa7a6SAndroid Build Coastguard Workertable VkGraph {
122*523fa7a6SAndroid Build Coastguard Worker  // Schema version.
123*523fa7a6SAndroid Build Coastguard Worker  version:string;
124*523fa7a6SAndroid Build Coastguard Worker
125*523fa7a6SAndroid Build Coastguard Worker  // Objects
126*523fa7a6SAndroid Build Coastguard Worker  chain:[OperatorCall];
127*523fa7a6SAndroid Build Coastguard Worker  values:[VkValue];
128*523fa7a6SAndroid Build Coastguard Worker
129*523fa7a6SAndroid Build Coastguard Worker  // Indices
130*523fa7a6SAndroid Build Coastguard Worker  input_ids:[uint];
131*523fa7a6SAndroid Build Coastguard Worker  output_ids:[uint];
132*523fa7a6SAndroid Build Coastguard Worker
133*523fa7a6SAndroid Build Coastguard Worker  // Raw Objects (e.g. weight tensors and custom shaders)
134*523fa7a6SAndroid Build Coastguard Worker  constants:[VkBytes];
135*523fa7a6SAndroid Build Coastguard Worker  shaders:[VkBytes];
136*523fa7a6SAndroid Build Coastguard Worker
137*523fa7a6SAndroid Build Coastguard Worker  // Graph configuration
138*523fa7a6SAndroid Build Coastguard Worker  // As per flatbuffer BC/FC policy, new fields can be freely added to this
139*523fa7a6SAndroid Build Coastguard Worker  // section. It is recommended to provide default values, since older blobs
140*523fa7a6SAndroid Build Coastguard Worker  // without the field will be deserialized with the default value.
141*523fa7a6SAndroid Build Coastguard Worker
142*523fa7a6SAndroid Build Coastguard Worker  // Sets an override for the storage type and memory layout that will be used
143*523fa7a6SAndroid Build Coastguard Worker  // to represent a VkTensor if the VkTensor is not serialized with a particular
144*523fa7a6SAndroid Build Coastguard Worker  // storage type or memory layout setting
145*523fa7a6SAndroid Build Coastguard Worker  storage_type_override:VkStorageType = DEFAULT_STORAGE;
146*523fa7a6SAndroid Build Coastguard Worker  memory_layout_override:VkMemoryLayout = DEFAULT_LAYOUT;
147*523fa7a6SAndroid Build Coastguard Worker}
148*523fa7a6SAndroid Build Coastguard Worker
149*523fa7a6SAndroid Build Coastguard Workerroot_type VkGraph;
150