Hi, all.

I'm trying to implement OpenCL for my project.


Code :
err = clGetPlatformIDs(0, 0, &num);
    if (err != CL_SUCCESS)
    {
        printf("Error: Failed to get platforms!\n");
        return EXIT_FAILURE;
    }
    platforms = (cl_platform_id *) malloc(sizeof(cl_platform_id) * num);
    err = clGetPlatformIDs(num, platforms, &num);
    if (err != CL_SUCCESS)
    {
        printf("Error: Failed to get platform ID!\n");
        return EXIT_FAILURE;
    }
    prop[1] = (cl_context_properties) platforms[0];
    mContext = clCreateContextFromType(prop, CL_DEVICE_TYPE_DEFAULT, NULL, NULL, &err);
    if (!mContext)
    {
        printf("Error: Failed to create a compute context!\n");
        return EXIT_FAILURE;
    }
    clGetContextInfo(mContext, CL_CONTEXT_DEVICES, 0, NULL, &cb);
    devices = (cl_device_id *) malloc(cb);
    clGetContextInfo(mContext, CL_CONTEXT_DEVICES, cb, devices, 0);
    device_id = devices[0];
    clGetDeviceInfo(device_id, CL_DEVICE_NAME, 0, NULL, &cb);
    devname = (char *) malloc(cb);
    clGetDeviceInfo(device_id, CL_DEVICE_NAME, cb, devname, 0);
    printf("[Device Name: %s]\n", devname);
 
    char *devvendor; devvendor = (char *) malloc(cb);
    clGetDeviceInfo(device_id, CL_DEVICE_VENDOR, cb, devvendor, 0);
    printf("[Device VENDOR: %s]\n", devvendor);
 
    char *devVERSION; devVERSION = (char *) malloc(cb);
    clGetDeviceInfo(device_id, CL_DEVICE_VERSION, cb, devVERSION, 0);
    printf("[Device VERSION: %s]\n", devVERSION);
 
    char *driVERSION; driVERSION = (char *) malloc(cb);
    clGetDeviceInfo(device_id, CL_DRIVER_VERSION, cb, driVERSION, 0);
    printf("[Driver VERSION: %s]\n", driVERSION);

I have the following log:
[Device Name: ARM CPU Compute Device]
[Device VENDOR: Apple]
[Device VERSION: OpenCL 1.1 ]
[Driver VERSION: 1.1]

My *.cl file:
Code :
__kernel void sine_wave(__global float4* pos, unsigned int width, unsigned int height, float time)
{
    unsigned int x = get_global_id(0);
    unsigned int y = get_global_id(1);
 
    // calculate uv coordinates
    float u = x / (float) width;
    float v = y / (float) height;
    u = u*2.0f - 1.0f;
    v = v*2.0f - 1.0f;
 
    // calculate simple sine wave pattern
    float freq = 4.0f;
    float w = sin(u*freq + time) * cos(v*freq + time) * 0.5f;
 
    // write output vertex
    pos[y*width+x] = (float4)(u, w, v, 1.0f);
}

Code :
size_t program_length;
    char *programSource = oclLoadProgSource("AnimatedTexture.cl", "", &program_length);
 
    // create the program
    cpProgram = clCreateProgramWithSource(*mCLRoot->getContext(), 1, (const char**) &programSource, &program_length, &error);
 
    cl_device_id *devices = mCLRoot->devices;
    // build the program
    //error = clBuildProgram(cpProgram, 0, NULL, "-cl-fast-relaxed-math", NULL, NULL);
    error = clBuildProgram(cpProgram, 0, NULL, NULL, NULL, NULL);
 
    if (error != CL_SUCCESS) {
 
        // Shows the log
        char* build_log;
        size_t log_size;
        // First call to know the proper size
        clGetProgramBuildInfo(cpProgram, devices[0], CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size);
        build_log = new char[log_size+1];
        // Second call to get the log
        clGetProgramBuildInfo(cpProgram, devices[0], CL_PROGRAM_BUILD_LOG, log_size, build_log, NULL);
        build_log[log_size] = '\0';
        std::cout << build_log << std::endl;
        delete[] build_log;
    }

I have got error 11 and my log is empty. Please, help. Thanks.