blob: ccc8f6effcf9065c08b35a109633d0e3e5e74184 [file] [log] [blame]
//
// Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "ClTensorHandle.hpp"
#include <aclCommon/ArmComputeTensorUtils.hpp>
namespace armnn
{
std::shared_ptr<ITensorHandle> ClTensorHandle::DecorateTensorHandle(const TensorInfo& tensorInfo)
{
auto* parent = const_cast<ClTensorHandle*>(this);
auto decorated = std::make_shared<ClTensorHandleDecorator>(parent, tensorInfo);
m_Decorated.emplace_back(decorated);
return decorated;
}
ClTensorDecorator::ClTensorDecorator()
: m_Original(nullptr), m_TensorInfo()
{
}
ClTensorDecorator::ClTensorDecorator(arm_compute::ICLTensor* original, const TensorInfo& tensorInfo)
: m_Original(nullptr), m_TensorInfo()
{
m_TensorInfo = armcomputetensorutils::BuildArmComputeTensorInfo(tensorInfo);
m_Original = original;
}
arm_compute::ITensorInfo* ClTensorDecorator::info() const
{
return &m_TensorInfo;
}
arm_compute::ITensorInfo* ClTensorDecorator::info()
{
return &m_TensorInfo;
}
const cl::Buffer& ClTensorDecorator::cl_buffer() const
{
ARM_COMPUTE_ERROR_ON(m_Original == nullptr);
return m_Original->cl_buffer();
}
arm_compute::ICLTensor* ClTensorDecorator::parent()
{
return nullptr;
}
arm_compute::CLQuantization ClTensorDecorator::quantization() const
{
return m_Original->quantization();
}
void ClTensorDecorator::map(bool blocking)
{
arm_compute::ICLTensor::map(arm_compute::CLScheduler::get().queue(), blocking);
}
void ClTensorDecorator::unmap()
{
arm_compute::ICLTensor::unmap(arm_compute::CLScheduler::get().queue());
}
uint8_t* ClTensorDecorator::do_map(cl::CommandQueue& q, bool blocking)
{
if(m_Original->buffer() == nullptr)
{
m_Original->map(q, blocking);
}
return m_Original->buffer();
}
void ClTensorDecorator::do_unmap(cl::CommandQueue& q)
{
m_Original->unmap(q);
}
}