@@ -246,6 +246,7 @@ Error QnnManager::InitContext(
246246 options_->backend_options ()->backend_type ());
247247 backend_params_ptr_ = QnnBackendFactory ().Create (
248248 backend_bundle_ptr_->implementation .get (),
249+ backend_bundle_ptr_->system_implementation .get (),
249250 backend_bundle_ptr_->qnn_backend_ptr .get (),
250251 backend_bundle_ptr_->qnn_device_ptr .get (),
251252 qnn_context_blob_,
@@ -279,7 +280,10 @@ Error QnnManager::InitContext(
279280 BackendInitializeState::INITIALIZED ;
280281 }
281282
282- if (IsOnlinePrepare ()) {
283+ if (IsOnlinePrepare () &&
284+ backend_params_ptr_->qnn_backend_cache_ptr_ ->GetCacheState () ==
285+ QnnBackendCache::SERIALIZE ) {
286+ // Set up DLC environment at AOT time
283287 // Check whether the QNN version supports the DLC format.
284288 Qnn_ApiVersion_t qnn_version = {QNN_VERSION_INIT };
285289 backend_bundle_ptr_->implementation ->GetQnnInterface ()
@@ -304,6 +308,7 @@ Error QnnManager::InitContextCache() {
304308 options_->backend_options ()->backend_type ());
305309 backend_params_ptr_ = QnnBackendFactory ().Create (
306310 backend_bundle_ptr_->implementation .get (),
311+ backend_bundle_ptr_->system_implementation .get (),
307312 backend_bundle_ptr_->qnn_backend_ptr .get (),
308313 backend_bundle_ptr_->qnn_device_ptr .get (),
309314 qnn_context_blob_,
@@ -476,9 +481,9 @@ Error QnnManager::ProfileExecuteData(
476481}
477482
478483void QnnManager::Destroy () {
484+ qnn_dlc_manager_->Destroy ();
479485 backend_params_ptr_.reset (new BackendConfigParameters ());
480486 backend_bundle_ptr_.reset (new QnnBackendBundle ());
481- qnn_dlc_manager_->Destroy ();
482487}
483488
484489void QnnManager::DestroyContext () {
@@ -539,12 +544,25 @@ Error QnnManager::GetContextBinary(
539544
540545Error QnnManager::CompileDlc () {
541546 Qnn_ErrorHandle_t error;
542- auto qnn_dlc_graph_info = qnn_dlc_manager_->GetQnnDlcGraphInfoPtr ();
543- uint32_t qnn_dlc_graph_info_num = qnn_dlc_manager_->GetQnnDlcGraphInfoNum ();
544- for (uint32_t i = 0 ; i < qnn_dlc_graph_info_num; ++i) {
545- auto & graphInfo = (*qnn_dlc_graph_info)[i];
547+ auto graphs = qnn_dlc_manager_->GetQnnDlcGraphInfoPtr ();
548+ uint32_t num_graphs = qnn_dlc_manager_->GetQnnDlcGraphInfoNum ();
549+ for (uint32_t i = 0 ; i < num_graphs; ++i) {
550+ auto & graphInfo = graphs[i].graphInfoV1 ;
551+ Qnn_GraphHandle_t graphHandle;
552+ error = backend_bundle_ptr_->implementation ->GetQnnInterface ()
553+ .qnn_graph_retrieve (
554+ backend_params_ptr_->qnn_context_ptr_ ->GetHandle (),
555+ graphInfo.graphName ,
556+ &graphHandle);
557+ if (error != QNN_SUCCESS ) {
558+ QNN_EXECUTORCH_LOG_ERROR (
559+ " Failed to retrieve graph %s. Error %d." ,
560+ graphInfo.graphName ,
561+ QNN_GET_ERROR_CODE (error));
562+ return Error::Internal;
563+ }
546564 backend_params_ptr_->qnn_graph_ptr_ ->SetGraphHandle (
547- graphInfo.graphName , graphInfo. graph );
565+ graphInfo.graphName , graphHandle );
548566 error =
549567 backend_params_ptr_->qnn_graph_ptr_ ->GraphFinalize (graphInfo.graphName );
550568 if (error != QNN_SUCCESS ) {
@@ -559,9 +577,9 @@ Error QnnManager::CompileDlc() {
559577
560578 // Mapping memory address for the input and output of mutable buffer
561579 std::unordered_map<int , const void *> mutable_buffer_id_to_memory_map;
562- for (uint32_t i = 0 ; i < graphInfo.numInputTensors ; ++i) {
563- auto tw = CreateTensorWrapper (graphInfo.inputTensors [i]);
564- tw->UpdateQnnTensorMeta (graphInfo.inputTensors [i]);
580+ for (uint32_t i = 0 ; i < graphInfo.numGraphInputs ; ++i) {
581+ auto tw = CreateTensorWrapper (graphInfo.graphInputs [i]);
582+ tw->UpdateQnnTensorMeta (graphInfo.graphInputs [i]);
565583
566584 int mutable_buffer_id = ExtractMutableBufferNumber (tw->GetName ());
567585 if (mutable_buffer_id != -1 ) {
@@ -572,9 +590,9 @@ Error QnnManager::CompileDlc() {
572590 }
573591 graph_inputs.push_back (tw);
574592 }
575- for (uint32_t i = 0 ; i < graphInfo.numOutputTensors ; ++i) {
576- auto tw = CreateTensorWrapper (graphInfo.outputTensors [i]);
577- tw->UpdateQnnTensorMeta (graphInfo.outputTensors [i]);
593+ for (uint32_t i = 0 ; i < graphInfo.numGraphOutputs ; ++i) {
594+ auto tw = CreateTensorWrapper (graphInfo.graphOutputs [i]);
595+ tw->UpdateQnnTensorMeta (graphInfo.graphOutputs [i]);
578596 int mutable_buffer_id = ExtractMutableBufferNumber (tw->GetName ());
579597 if (mutable_buffer_id != -1 &&
580598 mutable_buffer_id_to_memory_map.find (mutable_buffer_id) !=
0 commit comments