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