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);

float4 clr = read_imagef(img2,my_sampler, (float2)(x, y));
float4 clr2 = (float4)(1,0,0,1);
res[x * 1024 + y] =  [b] clr * 0.0 [/b]+ 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
Version: 4.3.0
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?