@@ -51,6 +51,9 @@ Error QnnBackendCache::GetQnnGraphInfoFromBinary() {
5151 } else if (binaryinfo->version == QNN_SYSTEM_CONTEXT_BINARY_INFO_VERSION_2) {
5252 num_graphs = binaryinfo->contextBinaryInfoV2 .numGraphs ;
5353 graph = binaryinfo->contextBinaryInfoV2 .graphs ;
54+ } else if (binaryinfo->version == QNN_SYSTEM_CONTEXT_BINARY_INFO_VERSION_3) {
55+ num_graphs = binaryinfo->contextBinaryInfoV3 .numGraphs ;
56+ graph = binaryinfo->contextBinaryInfoV3 .graphs ;
5457 } else {
5558 QNN_EXECUTORCH_LOG_WARN (
5659 " Unknown QNN BinaryInfo version %d." , binaryinfo->version );
@@ -65,28 +68,45 @@ Error QnnBackendCache::GetQnnGraphInfoFromBinary() {
6568 return Error::Internal;
6669 }
6770
68- // only have version_1 now
69- if (graph[0 ].version != QNN_SYSTEM_CONTEXT_GRAPH_INFO_VERSION_1) {
71+ if (graph[0 ].version == QNN_SYSTEM_CONTEXT_GRAPH_INFO_VERSION_1) {
72+ // get graph name from metadata
73+ graph_name_ = graph->graphInfoV1 .graphName ;
74+
75+ // get graph inputs from metadata
76+ uint32_t numGraphInputs = graph->graphInfoV1 .numGraphInputs ;
77+ input_tensor_structs_.reserve (numGraphInputs);
78+ for (std::uint32_t i = 0 ; i < numGraphInputs; ++i) {
79+ input_tensor_structs_.emplace_back (graph->graphInfoV1 .graphInputs [i]);
80+ }
81+
82+ // get graph outputs from metadata
83+ uint32_t numGraphOutputs = graph->graphInfoV1 .numGraphOutputs ;
84+ output_tensor_structs_.reserve (numGraphOutputs);
85+ for (std::uint32_t i = 0 ; i < numGraphOutputs; ++i) {
86+ output_tensor_structs_.emplace_back (graph->graphInfoV1 .graphOutputs [i]);
87+ }
88+ } else if (graph[0 ].version == QNN_SYSTEM_CONTEXT_GRAPH_INFO_VERSION_3) {
89+ // get graph name from metadata
90+ graph_name_ = graph->graphInfoV3 .graphName ;
91+
92+ // get graph inputs from metadata
93+ uint32_t numGraphInputs = graph->graphInfoV3 .numGraphInputs ;
94+ input_tensor_structs_.reserve (numGraphInputs);
95+ for (std::uint32_t i = 0 ; i < numGraphInputs; ++i) {
96+ input_tensor_structs_.emplace_back (graph->graphInfoV3 .graphInputs [i]);
97+ }
98+
99+ // get graph outputs from metadata
100+ uint32_t numGraphOutputs = graph->graphInfoV3 .numGraphOutputs ;
101+ output_tensor_structs_.reserve (numGraphOutputs);
102+ for (std::uint32_t i = 0 ; i < numGraphOutputs; ++i) {
103+ output_tensor_structs_.emplace_back (graph->graphInfoV3 .graphOutputs [i]);
104+ }
105+ } else {
70106 QNN_EXECUTORCH_LOG_WARN (
71107 " Unknown QNN GraphInfo version %d." , graph[0 ].version );
72108 return Error::Internal;
73109 }
74- // get graph name from metadata
75- graph_name_ = graph->graphInfoV1 .graphName ;
76-
77- // get graph inputs from metadata
78- uint32_t numGraphInputs = graph->graphInfoV1 .numGraphInputs ;
79- input_tensor_structs_.reserve (numGraphInputs);
80- for (std::uint32_t i = 0 ; i < numGraphInputs; ++i) {
81- input_tensor_structs_.emplace_back (graph->graphInfoV1 .graphInputs [i]);
82- }
83-
84- // get graph outputs from metadata
85- uint32_t numGraphOutputs = graph->graphInfoV1 .numGraphOutputs ;
86- output_tensor_structs_.reserve (numGraphOutputs);
87- for (std::uint32_t i = 0 ; i < numGraphOutputs; ++i) {
88- output_tensor_structs_.emplace_back (graph->graphInfoV1 .graphOutputs [i]);
89- }
90110
91111 return Error::Ok;
92112}
0 commit comments