cancel
Showing results for 
Search instead for 
Did you mean: 

Archives Discussions

ssarangi
Journeyman III

image2d_t doesn't write back values

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.s[0] = 1.0f; inp.s[1] = 0.0f; inp.s[2] = 0.0f; inp.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); }

0 Likes
0 Replies