xref: /aosp_15_r20/external/armnn/src/backends/cl/ICLTensorProxy.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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