assert(cache_info->pixels != NULL);
cache_info->opencl=AcquireMagickCLCacheInfo(device,cache_info->pixels,
cache_info->length);
+ if (cache_info->opencl == (MagickCLCacheInfo) NULL)
+ return((cl_mem) NULL);
}
return(cache_info->opencl->buffer);
}
(cache_info->opencl == (MagickCLCacheInfo) NULL))
return;
/*
- Ensure single threaded access to OpenCL environment.
+ Ensure single threaded access to OpenCL environment.
*/
LockSemaphoreInfo(cache_info->semaphore);
- cache_info->opencl=CopyMagickCLCacheInfo(cache_info->opencl);
+ cache_info->opencl=(MagickCLCacheInfo) CopyMagickCLCacheInfo(
+ cache_info->opencl);
UnlockSemaphoreInfo(cache_info->semaphore);
}
MagickPrivate cl_mem CreateOpenCLBuffer(MagickCLDevice device,
cl_mem_flags flags, size_t size, void *host_ptr)
{
- return(openCL_library->clCreateBuffer(device->context, flags, size, host_ptr,
+ return(openCL_library->clCreateBuffer(device->context,flags,size,host_ptr,
(cl_int *) NULL));
}
MagickPrivate MagickCLCacheInfo AcquireMagickCLCacheInfo(MagickCLDevice device,
Quantum *pixels,const MagickSizeType length)
{
+ cl_int
+ status;
+
MagickCLCacheInfo
info;
info->length=length;
info->pixels=pixels;
info->buffer=openCL_library->clCreateBuffer(device->context,
- CL_MEM_USE_HOST_PTR,(size_t) length,(void *) pixels,NULL);
- return(info);
+ CL_MEM_USE_HOST_PTR,(size_t) length,(void *) pixels,&status);
+ if (status == CL_SUCCESS)
+ return(info);
+ LockSemaphoreInfo(openCL_lock);
+ device->requested--;
+ UnlockSemaphoreInfo(openCL_lock);
+ return((MagickCLCacheInfo) RelinquishMagickMemory(info));
}
/*
if (device->profile_kernels != MagickFalse)
properties=CL_QUEUE_PROFILING_ENABLE;
queue=openCL_library->clCreateCommandQueue(device->context,
- device->deviceID,properties,NULL);
+ device->deviceID,properties,(cl_int *) NULL);
}
return(queue);
}
MagickPrivate cl_kernel AcquireOpenCLKernel(MagickCLDevice device,
const char *kernel_name)
{
- cl_int
- status;
-
cl_kernel
kernel;
assert(device != (MagickCLDevice) NULL);
- kernel=openCL_library->clCreateKernel(device->program,kernel_name,&status);
+ kernel=openCL_library->clCreateKernel(device->program,kernel_name,
+ (cl_int *) NULL);
return(kernel);
}
if (status != CL_SUCCESS)
{
(void) OpenCLThrowMagickException(input_info->opencl->device,exception,
- GetMagickModule(),ResourceLimitWarning,"clEnqueueNDRangeKernel failed.",
- "'%s'",".");
+ GetMagickModule(),ResourceLimitWarning,
+ "clEnqueueNDRangeKernel failed.","'%s'",".");
return(MagickFalse);
}
RegisterCacheEvent(input_info->opencl,event);
% o device: the OpenCL device.
%
% o queue: the OpenCL queue to be released.
-%
-%
*/
MagickPrivate void RelinquishOpenCLCommandQueue(MagickCLDevice device,
assert(device != (MagickCLDevice) NULL);
LockSemaphoreInfo(device->lock);
if ((device->profile_kernels != MagickFalse) ||
- (device->command_queues_index >= MAGICKCORE_OPENCL_COMMAND_QUEUES - 1))
+ (device->command_queues_index >= MAGICKCORE_OPENCL_COMMAND_QUEUES-1))
{
UnlockSemaphoreInfo(device->lock);
openCL_library->clFinish(queue);
}
else
{
- device->command_queues[++device->command_queues_index] = queue;
+ device->command_queues[++device->command_queues_index]=queue;
UnlockSemaphoreInfo(device->lock);
}
}