The imageAtomicCompSwap doesn't seem to be working.
I create a texture buffer like so (all texels set to value -1)
I expect the following shader to set texel number i to value i.Code :// build buffer std::vector<GLint> bufferData(ELEM_CNT,-1); glBindBuffer(GL_TEXTURE_BUFFER, buffer); glBufferData(GL_TEXTURE_BUFFER, sizeof(GLint)*bufferData.size(), &bufferData[0], GL_STATIC_DRAW); glBindBuffer(GL_TEXTURE_BUFFER, 0); // build texture glBindTexture(GL_TEXTURE_BUFFER, texture); glTexBuffer(GL_TEXTURE_BUFFER, GL_R32I, buffer);
However, it does not, values remain at -1. Replacing imageAtomicCompSwap by imageAtomicExchange gives the correct output.Code :#version 420 core layout(r32i) coherent uniform iimageBuffer imgData; void main() { imageAtomicCompSwap(imgData, gl_VertexID, -1, gl_VertexID); }
Code can be downloaded here (gmake and vs2010 projects are provided).