From a9e153398e4a998ee01623eb78c4604bbd8d34e7 Mon Sep 17 00:00:00 2001 From: Anthony Barbier Date: Fri, 22 Dec 2017 16:37:30 +0000 Subject: COMPMID-766 Allow graph examples to run without OpenCL being present on the platform Change-Id: I4142e0720ecb58549a08d4e86ad21abb882f5f37 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/114552 Reviewed-by: Anthony Barbier Tested-by: Anthony Barbier --- src/core/CL/OpenCL.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) (limited to 'src/core/CL/OpenCL.cpp') diff --git a/src/core/CL/OpenCL.cpp b/src/core/CL/OpenCL.cpp index 157b6d6820..726279c6ea 100644 --- a/src/core/CL/OpenCL.cpp +++ b/src/core/CL/OpenCL.cpp @@ -74,8 +74,9 @@ bool CLSymbols::load(const std::string &library) #define LOAD_FUNCTION_PTR(func_name, handle) \ func_name##_ptr = reinterpret_cast(dlsym(handle, #func_name)); - LOAD_FUNCTION_PTR(clBuildProgram, handle); - LOAD_FUNCTION_PTR(clEnqueueNDRangeKernel, handle); + LOAD_FUNCTION_PTR(clCreateContextFromType, handle); + LOAD_FUNCTION_PTR(clCreateCommandQueue, handle); + LOAD_FUNCTION_PTR(clGetContextInfo, handle); LOAD_FUNCTION_PTR(clBuildProgram, handle); LOAD_FUNCTION_PTR(clEnqueueNDRangeKernel, handle); LOAD_FUNCTION_PTR(clSetKernelArg, handle); @@ -125,6 +126,59 @@ bool opencl_is_available() } } // namespace arm_compute +cl_int clGetContextInfo(cl_context context, + cl_context_info param_name, + size_t param_value_size, + void *param_value, + size_t *param_value_size_ret) +{ + arm_compute::CLSymbols::get().load_default(); + auto func = arm_compute::CLSymbols::get().clGetContextInfo_ptr; + if(func != nullptr) + { + return func(context, param_name, param_value_size, param_value, param_value_size_ret); + } + else + { + return CL_OUT_OF_RESOURCES; + } +} + +cl_command_queue clCreateCommandQueue(cl_context context, + cl_device_id device, + cl_command_queue_properties properties, + cl_int *errcode_ret) +{ + arm_compute::CLSymbols::get().load_default(); + auto func = arm_compute::CLSymbols::get().clCreateCommandQueue_ptr; + if(func != nullptr) + { + return func(context, device, properties, 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 *), + void *user_data, + cl_int *errcode_ret) +{ + arm_compute::CLSymbols::get().load_default(); + auto func = arm_compute::CLSymbols::get().clCreateContextFromType_ptr; + if(func != nullptr) + { + return func(properties, device_type, pfn_notify, user_data, errcode_ret); + } + else + { + return nullptr; + } +} + cl_int clBuildProgram( cl_program program, cl_uint num_devices, -- cgit v1.2.1