1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2022 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker #pragma once 6*89c4ff92SAndroid Build Coastguard Worker 7*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/core/CL/ICLTensor.h> 8*89c4ff92SAndroid Build Coastguard Worker #include <arm_compute/core/ITensorInfo.h> 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker namespace armnn 11*89c4ff92SAndroid Build Coastguard Worker { 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker class ICLTensorProxy : public arm_compute::ICLTensor 14*89c4ff92SAndroid Build Coastguard Worker { 15*89c4ff92SAndroid Build Coastguard Worker public: ICLTensorProxy(arm_compute::ICLTensor * iclTensor)16*89c4ff92SAndroid Build Coastguard Worker ICLTensorProxy(arm_compute::ICLTensor* iclTensor) : m_DelegateTensor(iclTensor) {} 17*89c4ff92SAndroid Build Coastguard Worker ICLTensorProxy(const ICLTensorProxy&) = delete; 18*89c4ff92SAndroid Build Coastguard Worker ICLTensorProxy& operator=(const ICLTensorProxy&) = delete; 19*89c4ff92SAndroid Build Coastguard Worker ICLTensorProxy(ICLTensorProxy&&) = default; 20*89c4ff92SAndroid Build Coastguard Worker ICLTensorProxy& operator=(ICLTensorProxy&&) = default; 21*89c4ff92SAndroid Build Coastguard Worker set(arm_compute::ICLTensor * iclTensor)22*89c4ff92SAndroid Build Coastguard Worker void set(arm_compute::ICLTensor* iclTensor) 23*89c4ff92SAndroid Build Coastguard Worker { 24*89c4ff92SAndroid Build Coastguard Worker if(iclTensor != nullptr) 25*89c4ff92SAndroid Build Coastguard Worker { 26*89c4ff92SAndroid Build Coastguard Worker m_DelegateTensor = iclTensor; 27*89c4ff92SAndroid Build Coastguard Worker } 28*89c4ff92SAndroid Build Coastguard Worker } 29*89c4ff92SAndroid Build Coastguard Worker 30*89c4ff92SAndroid Build Coastguard Worker // Inherited methods overridden: info() const31*89c4ff92SAndroid Build Coastguard Worker arm_compute::ITensorInfo* info() const 32*89c4ff92SAndroid Build Coastguard Worker { 33*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); 34*89c4ff92SAndroid Build Coastguard Worker return m_DelegateTensor->info(); 35*89c4ff92SAndroid Build Coastguard Worker } 36*89c4ff92SAndroid Build Coastguard Worker info()37*89c4ff92SAndroid Build Coastguard Worker arm_compute::ITensorInfo* info() 38*89c4ff92SAndroid Build Coastguard Worker { 39*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); 40*89c4ff92SAndroid Build Coastguard Worker return m_DelegateTensor->info(); 41*89c4ff92SAndroid Build Coastguard Worker } 42*89c4ff92SAndroid Build Coastguard Worker buffer() const43*89c4ff92SAndroid Build Coastguard Worker uint8_t* buffer() const 44*89c4ff92SAndroid Build Coastguard Worker { 45*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); 46*89c4ff92SAndroid Build Coastguard Worker return m_DelegateTensor->buffer(); 47*89c4ff92SAndroid Build Coastguard Worker } 48*89c4ff92SAndroid Build Coastguard Worker quantization() const49*89c4ff92SAndroid Build Coastguard Worker arm_compute::CLQuantization quantization() const 50*89c4ff92SAndroid Build Coastguard Worker { 51*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); 52*89c4ff92SAndroid Build Coastguard Worker return m_DelegateTensor->quantization(); 53*89c4ff92SAndroid Build Coastguard Worker } 54*89c4ff92SAndroid Build Coastguard Worker cl_buffer() const55*89c4ff92SAndroid Build Coastguard Worker const cl::Buffer& cl_buffer() const 56*89c4ff92SAndroid Build Coastguard Worker { 57*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); 58*89c4ff92SAndroid Build Coastguard Worker return m_DelegateTensor->cl_buffer(); 59*89c4ff92SAndroid Build Coastguard Worker } 60*89c4ff92SAndroid Build Coastguard Worker 61*89c4ff92SAndroid Build Coastguard Worker protected: do_map(cl::CommandQueue & q,bool blocking)62*89c4ff92SAndroid Build Coastguard Worker uint8_t* do_map(cl::CommandQueue& q, bool blocking) 63*89c4ff92SAndroid Build Coastguard Worker { 64*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); 65*89c4ff92SAndroid Build Coastguard Worker m_DelegateTensor->map(q, blocking); 66*89c4ff92SAndroid Build Coastguard Worker return m_DelegateTensor->buffer(); 67*89c4ff92SAndroid Build Coastguard Worker } do_unmap(cl::CommandQueue & q)68*89c4ff92SAndroid Build Coastguard Worker void do_unmap(cl::CommandQueue& q) 69*89c4ff92SAndroid Build Coastguard Worker { 70*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); 71*89c4ff92SAndroid Build Coastguard Worker return m_DelegateTensor->unmap(q); 72*89c4ff92SAndroid Build Coastguard Worker } 73*89c4ff92SAndroid Build Coastguard Worker 74*89c4ff92SAndroid Build Coastguard Worker private: 75*89c4ff92SAndroid Build Coastguard Worker arm_compute::ICLTensor* m_DelegateTensor{ nullptr }; 76*89c4ff92SAndroid Build Coastguard Worker }; 77*89c4ff92SAndroid Build Coastguard Worker 78*89c4ff92SAndroid Build Coastguard Worker } //namespace armnn