1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2021 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 #include <cstddef> 7*89c4ff92SAndroid Build Coastguard Worker #include <memory> 8*89c4ff92SAndroid Build Coastguard Worker #include <armnn/MemorySources.hpp> 9*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/IgnoreUnused.hpp> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace armnn 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker /** Default Memory Allocator class returned from IBackendInternal::GetDefaultAllocator(MemorySource) */ 14*89c4ff92SAndroid Build Coastguard Worker class ClBackendDefaultAllocator : public armnn::ICustomAllocator 15*89c4ff92SAndroid Build Coastguard Worker { 16*89c4ff92SAndroid Build Coastguard Worker public: 17*89c4ff92SAndroid Build Coastguard Worker ClBackendDefaultAllocator() = default; 18*89c4ff92SAndroid Build Coastguard Worker allocate(size_t size,size_t alignment=0)19*89c4ff92SAndroid Build Coastguard Worker void* allocate(size_t size, size_t alignment = 0) override 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(alignment); 22*89c4ff92SAndroid Build Coastguard Worker cl_mem buf{ clCreateBuffer(arm_compute::CLScheduler::get().context().get(), 23*89c4ff92SAndroid Build Coastguard Worker CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE, 24*89c4ff92SAndroid Build Coastguard Worker size, 25*89c4ff92SAndroid Build Coastguard Worker nullptr, 26*89c4ff92SAndroid Build Coastguard Worker nullptr)}; 27*89c4ff92SAndroid Build Coastguard Worker return static_cast<void *>(buf); 28*89c4ff92SAndroid Build Coastguard Worker } 29*89c4ff92SAndroid Build Coastguard Worker free(void * ptr)30*89c4ff92SAndroid Build Coastguard Worker void free(void* ptr) override 31*89c4ff92SAndroid Build Coastguard Worker { 32*89c4ff92SAndroid Build Coastguard Worker ARM_COMPUTE_ERROR_ON(ptr == nullptr); 33*89c4ff92SAndroid Build Coastguard Worker clReleaseMemObject(static_cast<cl_mem>(ptr)); 34*89c4ff92SAndroid Build Coastguard Worker } 35*89c4ff92SAndroid Build Coastguard Worker GetMemorySourceType()36*89c4ff92SAndroid Build Coastguard Worker armnn::MemorySource GetMemorySourceType() override 37*89c4ff92SAndroid Build Coastguard Worker { 38*89c4ff92SAndroid Build Coastguard Worker return armnn::MemorySource::Gralloc; 39*89c4ff92SAndroid Build Coastguard Worker } 40*89c4ff92SAndroid Build Coastguard Worker GetMemoryRegionAtOffset(void * buffer,size_t offset,size_t alignment=0)41*89c4ff92SAndroid Build Coastguard Worker void* GetMemoryRegionAtOffset(void* buffer, size_t offset, size_t alignment = 0) override 42*89c4ff92SAndroid Build Coastguard Worker { 43*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(alignment); 44*89c4ff92SAndroid Build Coastguard Worker return static_cast<char*>(buffer) + offset; 45*89c4ff92SAndroid Build Coastguard Worker } 46*89c4ff92SAndroid Build Coastguard Worker }; 47*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn