write_imagef only writes correct color if read_imagef is used (OpenCL/OpenGL)
I am trying to write on to a texture using CL kernel.
void simpleGL(unsigned int width, unsigned int height, write_only image2d_t img1, read_only image2d_t img2, __global float4* res)
int x = get_global_id(0);
int y = get_global_id(1);
sampler_t my_sampler = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST;
float4 clr = read_imagef(img2,my_sampler, (float2)(x, y));
float4 clr2 = (float4)(1,0,0,1);
res[x * 1024 + y] = clr * 0.0 + clr2;
write_imagef(img1, (int2)( x, y), res[x * 1024 + y]);
Simply by adding clr * 0.0 shows correct color (in this case RED) as the output.
But if I remove read call or delete the statement clr * 0.0, color turns white, whatever color I try to update. I assume there is some assumption by the driver that texture must be brought in to memory only if read is called and then will write work.
Also if I make only WRITE_ONLY driver, I can't see other than white.
I do create textures after OpenCL context is created.
Any clue why.
I am running my program on NVIDIA:
Vendor: NVIDIA Corporation
Renderer: GeForce GT 525M/PCIe/SSE2
GLSL: 4.30 NVIDIA via Cg compiler
Context Profile: Compatibility
Are you sure that the image memory has been flushed after your kernel has been called but before you read it?
Last edited by utnapishtim; 05-21-2013 at 08:55 AM.