I tried once again and found that it is more an issue of the size specified when clearing the buffer than when creating it. Here I paste your modified code which doesn't work for me.
unsigned int bo[8]; unsigned char data[32 * 16]; glGenBuffers(8, bo); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, bo[0]); glBindBuffer(GL_SHADER_STORAGE_BUFFER, bo[0]); glBufferData(GL_SHADER_STORAGE_BUFFER, 32 * 16, &data[0], GL_DYNAMIC_COPY); glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, 12, &data[0]); checkGLError("GetBufferSubData"); glClearBufferSubData(GL_SHADER_STORAGE_BUFFER, GL_RGB32UI, 0, 12, GL_RGB_INTEGER, GL_UNSIGNED_INT, 0); // Works when using size 16 instead of 12, but 3 * 4 = 12 checkGLError("ClearBufferSubData"); glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, 12, &data[0]); checkGLError("GetBufferSubData");
The code reports INVALID_VALUE error after the ClearBufferSubData call.
Please, check my code again. If needed, I can send you a whole project for MSVC 2012 (using Freeglut and GLEW), it is only a simple test suite for the case.
Thank you in advance!