diff options
author | Anthony Barbier <anthony.barbier@arm.com> | 2018-08-08 13:20:04 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:54:54 +0000 |
commit | b6eb35371d222c6b7f61210d97ebd7dd9e197458 (patch) | |
tree | af89729ad68d665916c37abb5fd49e512fa40614 /src/core/CL/OpenCL.cpp | |
parent | 1d1f32ce7ef6acea4afd4cf6a929436640b72ccd (diff) | |
download | ComputeLibrary-b6eb35371d222c6b7f61210d97ebd7dd9e197458.tar.gz |
COMPMID-1478: Stop relying on static default OpenCL objects in cl2.hpp
This causes problems when ACL is used as a shared library on Android.
Fixes some problems related to creation / destruction order between the Graph's CL backend and core / runtime
Change-Id: I716d63fd42f4586df1ffbb6fa97e4db06d3a781b
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/143228
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Michele DiGiorgio <michele.digiorgio@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Diffstat (limited to 'src/core/CL/OpenCL.cpp')
-rw-r--r-- | src/core/CL/OpenCL.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/core/CL/OpenCL.cpp b/src/core/CL/OpenCL.cpp index a8ed9733ef..486bb6a1bd 100644 --- a/src/core/CL/OpenCL.cpp +++ b/src/core/CL/OpenCL.cpp @@ -74,6 +74,7 @@ bool CLSymbols::load(const std::string &library) #define LOAD_FUNCTION_PTR(func_name, handle) \ func_name##_ptr = reinterpret_cast<decltype(func_name) *>(dlsym(handle, #func_name)); + LOAD_FUNCTION_PTR(clCreateContext, handle); LOAD_FUNCTION_PTR(clCreateContextFromType, handle); LOAD_FUNCTION_PTR(clCreateCommandQueue, handle); LOAD_FUNCTION_PTR(clGetContextInfo, handle); @@ -254,6 +255,26 @@ cl_command_queue clCreateCommandQueue(cl_context context, } } +cl_context clCreateContext( + const cl_context_properties *properties, + cl_uint num_devices, + const cl_device_id *devices, + void (*pfn_notify)(const char *, const void *, size_t, void *), + void *user_data, + cl_int *errcode_ret) +{ + arm_compute::CLSymbols::get().load_default(); + auto func = arm_compute::CLSymbols::get().clCreateContext_ptr; + if(func != nullptr) + { + return func(properties, num_devices, devices, pfn_notify, user_data, errcode_ret); + } + else + { + return nullptr; + } +} + cl_context clCreateContextFromType(const cl_context_properties *properties, cl_device_type device_type, void (*pfn_notify)(const char *, const void *, size_t, void *), |