aboutsummaryrefslogtreecommitdiff
path: root/delegate/opaque/include/armnn_delegate.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'delegate/opaque/include/armnn_delegate.hpp')
-rw-r--r--delegate/opaque/include/armnn_delegate.hpp107
1 files changed, 51 insertions, 56 deletions
diff --git a/delegate/opaque/include/armnn_delegate.hpp b/delegate/opaque/include/armnn_delegate.hpp
index 8957dc87d6..5522699e26 100644
--- a/delegate/opaque/include/armnn_delegate.hpp
+++ b/delegate/opaque/include/armnn_delegate.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2020-2023 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -7,32 +7,17 @@
#include <DelegateOptions.hpp>
-#include <tensorflow/lite/builtin_ops.h>
-#include <tensorflow/lite/c/builtin_op_data.h>
-#include <tensorflow/lite/c/common.h>
-#include <tensorflow/lite/minimal_logging.h>
-#include <tensorflow/lite/version.h>
+#include <tensorflow/lite/c/c_api_opaque.h>
+#include <tensorflow/lite/core/experimental/acceleration/configuration/c/stable_delegate.h>
-#if TF_MAJOR_VERSION > 2 || (TF_MAJOR_VERSION == 2 && TF_MINOR_VERSION > 3)
-#define ARMNN_POST_TFLITE_2_3
-#endif
-
-#if TF_MAJOR_VERSION > 2 || (TF_MAJOR_VERSION == 2 && TF_MINOR_VERSION > 4)
-#define ARMNN_POST_TFLITE_2_4
-#endif
-
-#if TF_MAJOR_VERSION > 2 || (TF_MAJOR_VERSION == 2 && TF_MINOR_VERSION > 5)
-#define ARMNN_POST_TFLITE_2_5
-#endif
-
-namespace armnnDelegate
+namespace armnnOpaqueDelegate
{
struct DelegateData
{
DelegateData(const std::vector<armnn::BackendId>& backends)
- : m_Backends(backends)
- , m_Network(nullptr, nullptr)
+ : m_Backends(backends)
+ , m_Network(nullptr, nullptr)
{}
const std::vector<armnn::BackendId> m_Backends;
@@ -40,25 +25,25 @@ struct DelegateData
std::vector<armnn::IOutputSlot*> m_OutputSlotForNode;
};
-// Forward decleration for functions initializing the ArmNN Delegate
-DelegateOptions TfLiteArmnnDelegateOptionsDefault();
+/// Forward declaration for functions initializing the ArmNN Delegate
+::armnnDelegate::DelegateOptions TfLiteArmnnDelegateOptionsDefault();
-TfLiteDelegate* TfLiteArmnnDelegateCreate(armnnDelegate::DelegateOptions options);
+TfLiteOpaqueDelegate* TfLiteArmnnOpaqueDelegateCreate(const void* settings);
-void TfLiteArmnnDelegateDelete(TfLiteDelegate* tfLiteDelegate);
+void TfLiteArmnnOpaqueDelegateDelete(TfLiteOpaqueDelegate* tfLiteDelegate);
-TfLiteStatus DoPrepare(TfLiteContext* context, TfLiteDelegate* delegate);
+TfLiteStatus DoPrepare(TfLiteOpaqueContext* context, TfLiteOpaqueDelegate* delegate, void* data);
-/// ArmNN Delegate
-class Delegate
+/// ArmNN Opaque Delegate
+class ArmnnOpaqueDelegate
{
friend class ArmnnSubgraph;
public:
- explicit Delegate(armnnDelegate::DelegateOptions options);
+ explicit ArmnnOpaqueDelegate(armnnDelegate::DelegateOptions options);
- TfLiteIntArray* IdentifyOperatorsToDelegate(TfLiteContext* context);
+ TfLiteIntArray* IdentifyOperatorsToDelegate(TfLiteOpaqueContext* context);
- TfLiteDelegate* GetDelegate();
+ TfLiteOpaqueDelegateBuilder* GetDelegateBuilder() { return &m_Builder; }
/// Retrieve version in X.Y.Z form
static const std::string GetVersion();
@@ -70,18 +55,18 @@ private:
armnn::IRuntime* GetRuntime(const armnn::IRuntime::CreationOptions& options)
{
static armnn::IRuntimePtr instance = armnn::IRuntime::Create(options);
- // Instantiated on first use.
+ /// Instantiated on first use.
return instance.get();
}
- TfLiteDelegate m_Delegate = {
+ TfLiteOpaqueDelegateBuilder m_Builder =
+ {
reinterpret_cast<void*>(this), // .data_
- DoPrepare, // .Prepare
+ nullptr, // .Prepare
nullptr, // .CopyFromBufferHandle
nullptr, // .CopyToBufferHandle
nullptr, // .FreeBufferHandle
kTfLiteDelegateFlagsNone, // .flags
- nullptr, // .opaque_delegate_builder
};
/// ArmNN Runtime pointer
@@ -90,52 +75,62 @@ private:
armnnDelegate::DelegateOptions m_Options;
};
+static int TfLiteArmnnOpaqueDelegateErrno(TfLiteOpaqueDelegate* delegate) { return 0; }
+
+
+ /// In order for the delegate to be loaded by TfLite
+const TfLiteOpaqueDelegatePlugin* GetArmnnDelegatePluginApi();
+
+extern const TfLiteStableDelegate TFL_TheStableDelegate =
+{
+ /*delegate_abi_version=*/ TFL_STABLE_DELEGATE_ABI_VERSION,
+ /*delegate_name=*/ "ArmnnDelegatePlugin",
+ /*delegate_version=*/ "1.0.0",
+ /*delegate_plugin=*/ GetArmnnDelegatePluginApi()
+};
+
/// ArmnnSubgraph class where parsing the nodes to ArmNN format and creating the ArmNN Graph
class ArmnnSubgraph
{
public:
- static ArmnnSubgraph* Create(TfLiteContext* tfLiteContext,
- const TfLiteDelegateParams* parameters,
- const Delegate* delegate);
+ static ArmnnSubgraph* Create(TfLiteOpaqueContext* tfLiteContext,
+ const TfLiteOpaqueDelegateParams* parameters,
+ const ArmnnOpaqueDelegate* delegate);
- TfLiteStatus Prepare(TfLiteContext* tfLiteContext);
+ TfLiteStatus Prepare(TfLiteOpaqueContext* tfLiteContext);
- TfLiteStatus Invoke(TfLiteContext* tfLiteContext, TfLiteNode* tfLiteNode);
+ TfLiteStatus Invoke(TfLiteOpaqueContext* tfLiteContext, TfLiteOpaqueNode* tfLiteNode);
static TfLiteStatus VisitNode(DelegateData& delegateData,
- TfLiteContext* tfLiteContext,
- TfLiteRegistration* tfLiteRegistration,
- TfLiteNode* tfLiteNode,
+ TfLiteOpaqueContext* tfLiteContext,
+ TfLiteRegistrationExternal* tfLiteRegistration,
+ TfLiteOpaqueNode* tfLiteNode,
int nodeIndex);
-
private:
ArmnnSubgraph(armnn::NetworkId networkId,
armnn::IRuntime* runtime,
std::vector<armnn::BindingPointInfo>& inputBindings,
std::vector<armnn::BindingPointInfo>& outputBindings)
- : m_NetworkId(networkId), m_Runtime(runtime), m_InputBindings(inputBindings), m_OutputBindings(outputBindings)
+ : m_NetworkId(networkId)
+ , m_Runtime(runtime)
+ , m_InputBindings(inputBindings)
+ , m_OutputBindings(outputBindings)
{}
-
static TfLiteStatus AddInputLayer(DelegateData& delegateData,
- TfLiteContext* tfLiteContext,
+ TfLiteOpaqueContext* tfLiteContext,
const TfLiteIntArray* inputs,
std::vector<armnn::BindingPointInfo>& inputBindings);
-
static TfLiteStatus AddOutputLayer(DelegateData& delegateData,
- TfLiteContext* tfLiteContext,
+ TfLiteOpaqueContext* tfLiteContext,
const TfLiteIntArray* outputs,
std::vector<armnn::BindingPointInfo>& outputBindings);
-
-
/// The Network Id
armnn::NetworkId m_NetworkId;
- /// ArmNN Rumtime
+ /// ArmNN Runtime
armnn::IRuntime* m_Runtime;
-
- // Binding information for inputs and outputs
+ /// Binding information for inputs and outputs
std::vector<armnn::BindingPointInfo> m_InputBindings;
std::vector<armnn::BindingPointInfo> m_OutputBindings;
-
};
-} // armnnDelegate namespace \ No newline at end of file
+} // armnnOpaqueDelegate namespace \ No newline at end of file