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