0 Replies Latest reply on Dec 23, 2011 12:33 PM by ssarangi

    image2d_t doesn't write back values

    ssarangi

       

      Windows 7 AMD App SDK 2.6 Asic: Redwood

      I am trying to write a simple pass-thru kernel to see what the issue is and I can't seem to find what the error might be.



      So I am clearing the input image to RED and then the kernel should just write back the RED color to the output. However, it just writes out 0.0f for everything in output. Any particular reason why I am not seeing the values in the oup float array.

      PS: I am not even writing the image to disk here. I am just trying to match up the input and output float arrays.

       

      void kernel_test(CLManager* clMgr, int W, int H) { cl::ImageFormat format; format.image_channel_order = CL_RGBA; format.image_channel_data_type = CL_FLOAT; cl_float4* inp = new cl_float4[W * H]; for (int i = 0; i < W * H; ++i) { inp[i].s[0] = 1.0f; inp[i].s[1] = 0.0f; inp[i].s[2] = 0.0f; inp[i].s[3] = 1.0f; } cl_float4* oup = new cl_float4[W * H]; cl::Image2D clInputImage = clMgr->createImage<cl::Image2D>(CL_MEM_READ_ONLY, format, W, H, 0, NULL); cl::Image2D clOutputImage = clMgr->createImage<cl::Image2D>(CL_MEM_WRITE_ONLY, format, W, H, 0, NULL); cl::Sampler sampler = clMgr->createSampler(CL_FALSE, CL_ADDRESS_CLAMP_TO_EDGE, CL_FILTER_NEAREST); cl::size_t<3> origin; origin[0] = 0; origin[1] = 0, origin[2] = 0; cl::size_t<3> region; region[0] = W; region[1] = H; region[2] = 1; unsigned int pgmID = clMgr->buildSource("CL/convolution.cl"); cl::Kernel* kernel = clMgr->makeKernel(pgmID, "passthru"); cl::CommandQueue* queue = clMgr->getCmdQueue(); queue->enqueueWriteImage(clInputImage, CL_TRUE, origin, region, 0, 0, inp, 0, NULL); int status; status = kernel->setArg(0, clInputImage); status = kernel->setArg(1, clOutputImage); status = kernel->setArg(2, sampler); cl::NDRange globalSize(W, H); std::cout << "Starting Kernel: passthru" << std::endl; status = queue->enqueueNDRangeKernel(*kernel, 2, globalSize, cl::NullRange); std::cout << "Ending Kernel: passthru" << std::endl; status = queue->enqueueReadImage(clOutputImage, CL_TRUE, origin, region, 0, 0, oup); } // Kernel Code __kernel void passthru(__read_only image2d_t sourceImage, __write_only image2d_t outputImage, sampler_t sampler) { // Store each work-items unique row and column int2 coords = (int2){get_global_id(0), get_global_id(1)}; float4 pixel = read_imagef(sourceImage, sampler, coords); write_imagef(outputImage, coords, pixel); }