CL2dImage processing, Only half image is processed

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

CL2dImage processing, Only half image is processed

suleman
Hi,

Only half of the image is copied using the following Jocl and OpneCL kernel code.
main program related code lines and OpneCL kernel is shown below.
Thanks a lot.



Main program code (only related code)
-----------------------------------------
....
 //load image
 BufferedImage image = readImage("lena.png");
 assert image.getColorModel().getNumComponents() == 3;

  //Image dimensions
  int imageWidth = image.getWidth();
  int imageHeight = image.getHeight();

  //Output image
  BufferedImage outputImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
           
  //Create the memory object for the input- and output image

  int[] pixels = image.getRaster().getPixels(0, 0, imageWidth, imageHeight, (int[])null);

  CLImageFormat format = new CLImageFormat(INTENSITY, UNSIGNED_INT32);
  System.out.println("Pixels length: "+pixels.length);  

  CLImage2d<IntBuffer> imageA = defaultContext.createImage2d(newDirectIntBuffer(pixels), imageWidth, imageHeight, format,READ_ONLY);
  CLImage2d<IntBuffer> imageB = defaultContext.createImage2d(newDirectIntBuffer(pixels.length), imageWidth, imageHeight, format,WRITE_ONLY);

 CLCommandQueue queue = device.createCommandQueue();
 int localWorkSize =  Integer.parseInt(args[0]);
 int globalWorkSize = imageWidth;

//Setup kernel
kernel.putArgs(imageA,imageB); kernel.putArg(globalWorkSize); kernel.putArg(globalWorkSize);
queue.putWriteImage(imageA, false);                                      
queue.put2DRangeKernel(kernel, 0, 0, globalWorkSize, globalWorkSize, localWorkSize, localWorkSize);
queue.putReadImage(imageB,true);      



Kernel Code
----------------------
constant sampler_t imageSampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;

  kernel void gamma(read_only image2d_t inputImg, write_only image2d_t outputImg, int ImageWidth, int ImageHeight)
   {
    int x = get_global_id(0);
        int y = get_global_id(1);

        if((x >= ImageWidth) || (y>= ImageHeight)) {
                return;
        }
        else
        {
                int2 coord = (int2)(x,y);
                uint4 result = read_imageui(inputImg, imageSampler, coord);
                write_imageui(outputImg, coord, result);
        }
   }