Skip to content
This repository was archived by the owner on Apr 3, 2020. It is now read-only.

Commit ca0d1ad

Browse files
author
Kenneth Rohde Christiansen
committed
Merge pull request #41 from junmin-zhu/webclfix
[Android] Fix WebCL fail to run on PowerVR GPU.
2 parents 20dcb32 + 921e4ad commit ca0d1ad

File tree

2 files changed

+72
-60
lines changed

2 files changed

+72
-60
lines changed

Source/modules/webcl/WebCL.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static inline void getAllEnabledExtensions(WebCL* cl, PassRefPtr<WebCLPlatform>
4545

4646
PassRefPtr<WebCL> WebCL::create()
4747
{
48-
static int libraryLoaded = false;
48+
static bool libraryLoaded = false;
4949
/* load libs in lib list. */
5050
if (!libraryLoaded) {
5151
if (init(nullptr, 0))

Source/modules/webcl/WebCLOpenCL.cpp

+71-59
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,8 @@ cl_mem (CL_API_CALL *web_clCreateFromGLTexture)(cl_context context, cl_mem_flags
179179
cl_int (CL_API_CALL *web_clGetGLTextureInfo)(cl_mem, cl_gl_texture_info, size_t, void *, size_t *);
180180

181181
#if defined(WTF_OS_LINUX) || OS(ANDROID)
182-
#define MAP_FUNC(fn) { *(void**)(&fn) = dlsym(handle, #fn); if(!fn) return false; }
182+
#define MAP_FUNC(fn) { *(void**)(&fn) = dlsym(handle, #fn); }
183+
#define MAP_FUNC_OR_BAIL(fn) { *(void**)(&fn) = dlsym(handle, #fn); if(!fn) return false; }
183184

184185
static const char* DEFAULT_SO[] = LIBS;
185186
static const int DEFAULT_SO_LEN = SO_LEN;
@@ -204,70 +205,81 @@ bool init(const char** libs, int length)
204205

205206
if (!getCLHandle(mLibs, mLength))
206207
return false;
207-
MAP_FUNC(clGetImageInfo);
208-
MAP_FUNC(clCreateBuffer);
209-
MAP_FUNC(clCreateSubBuffer);
210-
MAP_FUNC(clGetCommandQueueInfo);
211-
MAP_FUNC(clEnqueueWriteBuffer);
212-
MAP_FUNC(clFinish);
213-
MAP_FUNC(clFlush);
214-
MAP_FUNC(clEnqueueReadBuffer);
215-
MAP_FUNC(clReleaseCommandQueue);
216-
MAP_FUNC(clEnqueueWriteImage);
217-
MAP_FUNC(clEnqueueCopyBuffer);
218-
MAP_FUNC(clEnqueueBarrierWithWaitList);
208+
209+
MAP_FUNC_OR_BAIL(clBuildProgram);
210+
MAP_FUNC_OR_BAIL(clCreateBuffer);
211+
MAP_FUNC_OR_BAIL(clCreateCommandQueue);
212+
MAP_FUNC_OR_BAIL(clCreateContext);
213+
MAP_FUNC_OR_BAIL(clCreateContextFromType);
214+
MAP_FUNC_OR_BAIL(clCreateImage);
215+
MAP_FUNC_OR_BAIL(clCreateKernel);
216+
MAP_FUNC_OR_BAIL(clCreateKernelsInProgram);
217+
MAP_FUNC_OR_BAIL(clCreateProgramWithSource);
218+
MAP_FUNC_OR_BAIL(clCreateSampler);
219+
MAP_FUNC_OR_BAIL(clCreateSubBuffer);
220+
MAP_FUNC_OR_BAIL(clCreateUserEvent);
221+
222+
MAP_FUNC_OR_BAIL(clEnqueueCopyBuffer);
223+
MAP_FUNC_OR_BAIL(clEnqueueReadBuffer);
224+
MAP_FUNC_OR_BAIL(clEnqueueWriteBuffer);
225+
MAP_FUNC_OR_BAIL(clEnqueueCopyImage);
226+
MAP_FUNC_OR_BAIL(clEnqueueReadImage);
227+
MAP_FUNC_OR_BAIL(clEnqueueWriteImage);
228+
MAP_FUNC_OR_BAIL(clEnqueueCopyBufferRect);
229+
MAP_FUNC_OR_BAIL(clEnqueueCopyBufferToImage);
230+
MAP_FUNC_OR_BAIL(clEnqueueCopyImageToBuffer);
231+
MAP_FUNC_OR_BAIL(clEnqueueReadBufferRect);
232+
MAP_FUNC_OR_BAIL(clEnqueueWriteBufferRect);
233+
MAP_FUNC_OR_BAIL(clEnqueueBarrierWithWaitList);
234+
MAP_FUNC_OR_BAIL(clEnqueueMarkerWithWaitList);
235+
MAP_FUNC_OR_BAIL(clEnqueueNDRangeKernel);
236+
MAP_FUNC_OR_BAIL(clEnqueueTask);
237+
238+
MAP_FUNC_OR_BAIL(clFinish);
239+
MAP_FUNC_OR_BAIL(clFlush);
240+
241+
MAP_FUNC_OR_BAIL(clGetContextInfo);
242+
MAP_FUNC_OR_BAIL(clGetCommandQueueInfo);
243+
MAP_FUNC_OR_BAIL(clGetDeviceIDs);
244+
MAP_FUNC_OR_BAIL(clGetDeviceInfo);
245+
MAP_FUNC_OR_BAIL(clGetEventInfo);
246+
MAP_FUNC_OR_BAIL(clGetEventProfilingInfo);
247+
MAP_FUNC_OR_BAIL(clGetImageInfo);
248+
MAP_FUNC_OR_BAIL(clGetKernelInfo);
249+
MAP_FUNC_OR_BAIL(clGetKernelWorkGroupInfo);
250+
MAP_FUNC_OR_BAIL(clGetPlatformIDs);
251+
MAP_FUNC_OR_BAIL(clGetSamplerInfo);
252+
MAP_FUNC_OR_BAIL(clGetSupportedImageFormats);
253+
254+
MAP_FUNC_OR_BAIL(clGetMemObjectInfo);
255+
MAP_FUNC_OR_BAIL(clGetPlatformInfo);
256+
MAP_FUNC_OR_BAIL(clGetProgramBuildInfo);
257+
MAP_FUNC_OR_BAIL(clGetProgramInfo);
258+
259+
MAP_FUNC_OR_BAIL(clReleaseCommandQueue);
260+
MAP_FUNC_OR_BAIL(clReleaseContext);
261+
MAP_FUNC_OR_BAIL(clReleaseDevice);
262+
MAP_FUNC_OR_BAIL(clReleaseEvent);
263+
MAP_FUNC_OR_BAIL(clReleaseKernel);
264+
MAP_FUNC_OR_BAIL(clReleaseMemObject);
265+
MAP_FUNC_OR_BAIL(clReleaseProgram);
266+
MAP_FUNC_OR_BAIL(clReleaseSampler);
267+
268+
MAP_FUNC_OR_BAIL(clSetEventCallback);
269+
MAP_FUNC_OR_BAIL(clSetKernelArg);
270+
MAP_FUNC_OR_BAIL(clSetUserEventStatus);
271+
272+
MAP_FUNC_OR_BAIL(clUnloadPlatformCompiler);
273+
MAP_FUNC_OR_BAIL(clWaitForEvents);
274+
275+
// They depends on whether OpenCL library support gl_sharing extension.
276+
// which aren't required mandatorily for OpenCL spec.
219277
MAP_FUNC(clEnqueueAcquireGLObjects);
220278
MAP_FUNC(clEnqueueReleaseGLObjects);
221-
MAP_FUNC(clEnqueueMarkerWithWaitList);
222-
MAP_FUNC(clEnqueueTask);
223-
MAP_FUNC(clEnqueueWriteBufferRect);
224-
MAP_FUNC(clEnqueueReadBufferRect);
225-
MAP_FUNC(clEnqueueReadImage);
226-
MAP_FUNC(clEnqueueNDRangeKernel);
227-
MAP_FUNC(clEnqueueCopyBufferRect);
228-
MAP_FUNC(clEnqueueCopyImage);
229-
MAP_FUNC(clEnqueueCopyImageToBuffer);
230-
MAP_FUNC(clEnqueueCopyBufferToImage);
231-
MAP_FUNC(clCreateCommandQueue);
232-
MAP_FUNC(clGetContextInfo);
233-
MAP_FUNC(clCreateProgramWithSource);
234-
MAP_FUNC(clCreateImage);
235279
MAP_FUNC(clCreateFromGLBuffer);
236280
MAP_FUNC(clCreateFromGLRenderbuffer);
237-
MAP_FUNC(clCreateSampler);
238281
MAP_FUNC(clCreateFromGLTexture);
239-
MAP_FUNC(clCreateUserEvent);
240-
MAP_FUNC(clWaitForEvents);
241-
MAP_FUNC(clReleaseContext);
242-
MAP_FUNC(clGetSupportedImageFormats);
243-
MAP_FUNC(clCreateContext);
244-
MAP_FUNC(clCreateContextFromType);
245-
MAP_FUNC(clGetPlatformIDs);
246-
MAP_FUNC(clUnloadPlatformCompiler);
247-
MAP_FUNC(clGetDeviceIDs);
248-
MAP_FUNC(clGetDeviceInfo);
249-
MAP_FUNC(clReleaseDevice);
250-
MAP_FUNC(clGetEventInfo);
251-
MAP_FUNC(clSetUserEventStatus);
252-
MAP_FUNC(clReleaseEvent);
253-
MAP_FUNC(clSetEventCallback);
254-
MAP_FUNC(clGetEventProfilingInfo);
255282
MAP_FUNC(clGetGLTextureInfo);
256-
MAP_FUNC(clGetKernelInfo);
257-
MAP_FUNC(clGetKernelWorkGroupInfo);
258-
MAP_FUNC(clSetKernelArg);
259-
MAP_FUNC(clReleaseKernel);
260-
MAP_FUNC(clGetMemObjectInfo);
261-
MAP_FUNC(clReleaseMemObject);
262-
MAP_FUNC(clGetPlatformInfo);
263-
MAP_FUNC(clGetProgramInfo);
264-
MAP_FUNC(clCreateKernel);
265-
MAP_FUNC(clGetProgramBuildInfo);
266-
MAP_FUNC(clBuildProgram);
267-
MAP_FUNC(clCreateKernelsInProgram);
268-
MAP_FUNC(clReleaseProgram);
269-
MAP_FUNC(clGetSamplerInfo);
270-
MAP_FUNC(clReleaseSampler);
271283

272284
return true;
273285
}

0 commit comments

Comments
 (0)