kernel arguments restrction

Hi forum,

In the manual it is mentioned that

“Arguments to __kernel functions in a program cannot be declared with the built-in scalar types bool, half, size_t, ptrdiff_t, intptr_t, and uintptr_t”. I need the pitch value to be passed to the kernel of type size_t.

Is there any other way to get around this issue?


I usually just use the cl_ulong type in kernel code to represent a size_t.

Make sure you cast the value to cl_ulong before passing it to the kernel in the off-chance that size_t is greater than 64-bits.

Thanks for the hint.

I am replacing every instant of the size_t with ulong and using ulong type in the kernel argument as well. But i am getting a new error as follows:

Error in setting kernel arguments for the pitch value: CL_INVALID_ARG_SIZE

I am setting the kernel argument as follows:

 errNum = clSetKernelArg(updateVelocityKernel,7,sizeof(ulong),(void*)&tPitch);

Any hint where to look into to debug this issue?


CL_INVALID_ARG_SIZE indicates that the size declared with clSetKernelArg() (i.e. sizeof(cl_ulong)) does not match the size of the corresponding argument in the declaration of your kernel.