I'm totally green with OpenCL. I'm trying to get a sample on Intel's website to work, but I cannot. This is the sample.
I'm getting the error CL_INVALID_MEM_OBJECT when trying to pass an integer argument to clSetKernelArg like so:
err = clSetKernelArg(ocl->kernel, 2, sizeof(cl_mem), (void *)&width);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
The tutorial is supposed to work on an image, and specifically states the arguments should be set as such:
err |= clSetKernelArg(ocl->kernel, 2, sizeof(cl_mem), (void *) &width);
err |= clSetKernelArg(ocl->kernel, 3, sizeof(cl_mem), (void *) &height);
Here is the full function:
cl_uint SetKernelArguments(ocl_args_d_t *ocl, cl_uint width, cl_uint height)
{
cl_int err = CL_SUCCESS;
err = clSetKernelArg(ocl->kernel, 0, sizeof(cl_mem), (void *)&ocl->srcA);
if (CL_SUCCESS != err)
{
LogError("error: Failed to set argument srcA, returned %s\n", TranslateOpenCLError(err));
return err;
}
err = clSetKernelArg(ocl->kernel, 1, sizeof(cl_mem), (void *)&ocl->dstMem);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
err = clSetKernelArg(ocl->kernel, 2, sizeof(cl_uint), (void *)&width);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
err = clSetKernelArg(ocl->kernel, 3, sizeof(cl_mem), (void *)&height);
if (CL_SUCCESS != err)
{
LogError("Error: Failed to set argument dstMem, returned %s\n", TranslateOpenCLError(err));
return err;
}
return err;
}
One last note: changing the size to sizeof(cl_uint) for clSetKernelArg changes the error to CL_INVALID_ARG_SIZE.
In case this isn't enough, I have the source made public on github here.
Quite certain I followed the instructions well on the tutorial, but I cannot figure out what I may have missed. Thanks for your time.