blob: 300f56000064c57ff03ae0e5bbd4f6e7d6ae8c94 [file] [log] [blame]
David Monahan6642b8a2021-11-04 16:31:46 +00001//
2// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6#include <cstddef>
7#include <memory>
8#include <armnn/MemorySources.hpp>
9#include <armnn/utility/IgnoreUnused.hpp>
10
11namespace armnn
12{
13/** Default Memory Allocator class returned from IBackendInternal::GetDefaultAllocator(MemorySource) */
14class ClBackendDefaultAllocator : public armnn::ICustomAllocator
15{
16public:
17 ClBackendDefaultAllocator() = default;
18
19 void* allocate(size_t size, size_t alignment = 0) override
20 {
21 IgnoreUnused(alignment);
22 cl_mem buf{ clCreateBuffer(arm_compute::CLScheduler::get().context().get(),
23 CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE,
24 size,
25 nullptr,
26 nullptr)};
27 return static_cast<void *>(buf);
28 }
29
30 void free(void* ptr) override
31 {
32 ARM_COMPUTE_ERROR_ON(ptr == nullptr);
33 clReleaseMemObject(static_cast<cl_mem>(ptr));
34 }
35
36 armnn::MemorySource GetMemorySourceType() override
37 {
38 return armnn::MemorySource::Gralloc;
39 }
40
41 void* GetMemoryRegionAtOffset(void* buffer, size_t offset, size_t alignment = 0) override
42 {
43 IgnoreUnused(alignment);
44 return static_cast<char*>(buffer) + offset;
45 }
46};
47} // namespace armnn