IVGCVSW-6687 Implement ICLTensorProxy
* Implement ICLTensorProxy and unit tests
* Remove IClImportTensorHandle and use IClTensorHandle to access ICLTensor
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I791d0f2c6f8bad841a56e39e196baf0e533c7124
diff --git a/src/backends/cl/ICLTensorProxy.hpp b/src/backends/cl/ICLTensorProxy.hpp
new file mode 100644
index 0000000..fff9c53
--- /dev/null
+++ b/src/backends/cl/ICLTensorProxy.hpp
@@ -0,0 +1,78 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <arm_compute/core/CL/ICLTensor.h>
+#include <arm_compute/core/ITensorInfo.h>
+
+namespace armnn
+{
+
+class ICLTensorProxy : public arm_compute::ICLTensor
+{
+public:
+ ICLTensorProxy(arm_compute::ICLTensor* iclTensor) : m_DelegateTensor(iclTensor) {}
+ ICLTensorProxy(const ICLTensorProxy&) = delete;
+ ICLTensorProxy& operator=(const ICLTensorProxy&) = delete;
+ ICLTensorProxy(ICLTensorProxy&&) = default;
+ ICLTensorProxy& operator=(ICLTensorProxy&&) = default;
+
+ void set(arm_compute::ICLTensor* iclTensor)
+ {
+ if(iclTensor != nullptr)
+ {
+ m_DelegateTensor = iclTensor;
+ }
+ }
+
+ // Inherited methods overridden:
+ arm_compute::ITensorInfo* info() const
+ {
+ ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr);
+ return m_DelegateTensor->info();
+ }
+
+ arm_compute::ITensorInfo* info()
+ {
+ ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr);
+ return m_DelegateTensor->info();
+ }
+
+ uint8_t* buffer() const
+ {
+ ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr);
+ return m_DelegateTensor->buffer();
+ }
+
+ arm_compute::CLQuantization quantization() const
+ {
+ ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr);
+ return m_DelegateTensor->quantization();
+ }
+
+ const cl::Buffer& cl_buffer() const
+ {
+ ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr);
+ return m_DelegateTensor->cl_buffer();
+ }
+
+protected:
+ uint8_t* do_map(cl::CommandQueue& q, bool blocking)
+ {
+ ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr);
+ m_DelegateTensor->map(q, blocking);
+ return m_DelegateTensor->buffer();
+ }
+ void do_unmap(cl::CommandQueue& q)
+ {
+ ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr);
+ return m_DelegateTensor->unmap(q);
+ }
+
+private:
+ arm_compute::ICLTensor* m_DelegateTensor{ nullptr };
+};
+
+} //namespace armnn
\ No newline at end of file