blob: ccc8f6effcf9065c08b35a109633d0e3e5e74184 [file] [log] [blame]
Mike Kelly4cc341c2023-07-07 15:43:06 +01001//
2// Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ClTensorHandle.hpp"
7
8#include <aclCommon/ArmComputeTensorUtils.hpp>
9
10namespace armnn
11{
12 std::shared_ptr<ITensorHandle> ClTensorHandle::DecorateTensorHandle(const TensorInfo& tensorInfo)
13 {
14 auto* parent = const_cast<ClTensorHandle*>(this);
15 auto decorated = std::make_shared<ClTensorHandleDecorator>(parent, tensorInfo);
16 m_Decorated.emplace_back(decorated);
17 return decorated;
18 }
19
20 ClTensorDecorator::ClTensorDecorator()
21 : m_Original(nullptr), m_TensorInfo()
22 {
23 }
24
25 ClTensorDecorator::ClTensorDecorator(arm_compute::ICLTensor* original, const TensorInfo& tensorInfo)
26 : m_Original(nullptr), m_TensorInfo()
27 {
28 m_TensorInfo = armcomputetensorutils::BuildArmComputeTensorInfo(tensorInfo);
29 m_Original = original;
30 }
31
32 arm_compute::ITensorInfo* ClTensorDecorator::info() const
33 {
34 return &m_TensorInfo;
35 }
36
37 arm_compute::ITensorInfo* ClTensorDecorator::info()
38 {
39 return &m_TensorInfo;
40 }
41
42 const cl::Buffer& ClTensorDecorator::cl_buffer() const
43 {
44 ARM_COMPUTE_ERROR_ON(m_Original == nullptr);
45 return m_Original->cl_buffer();
46 }
47
48 arm_compute::ICLTensor* ClTensorDecorator::parent()
49 {
50 return nullptr;
51 }
52
53 arm_compute::CLQuantization ClTensorDecorator::quantization() const
54 {
55 return m_Original->quantization();
56 }
57
58 void ClTensorDecorator::map(bool blocking)
59 {
60 arm_compute::ICLTensor::map(arm_compute::CLScheduler::get().queue(), blocking);
61 }
62
63 void ClTensorDecorator::unmap()
64 {
65 arm_compute::ICLTensor::unmap(arm_compute::CLScheduler::get().queue());
66 }
67
68 uint8_t* ClTensorDecorator::do_map(cl::CommandQueue& q, bool blocking)
69 {
70 if(m_Original->buffer() == nullptr)
71 {
72 m_Original->map(q, blocking);
73 }
74 return m_Original->buffer();
75 }
76
77 void ClTensorDecorator::do_unmap(cl::CommandQueue& q)
78 {
79 m_Original->unmap(q);
80 }
81
82}