I have an application where I use texture buffers bound using glBindImageTexture, and my GLSL code does various things and updates the buffers.
Recently I changed some of my image buffer formats from GL_R32UI to GL_RGBA32UI. So basically, one texel was 1 unsigned int before, and now it is 4 unsigned ints. Everything works fine when doing imageStores, imageLoads, and client-side things.
I get a few problems currently when using imageAtomic* functions. Let's take imageAtomicAdd. The last parameter always is integer-sized, regardless of the buffer format. Eg. it's not a uvec4, and remains a single uint. When I call imageAtomicAdd(some_uimageBuffer, some_address, 1u), what is supposed to happen exactly? Will GLSL increment all 4 texel components (x,y,z and w), or just one? Which one?
Thanks for your insight!