my name is Yves and I'm a developer of the free and open source strategy game 0 A.D. (play0ad.com).
I've started experimenting with more modern OpenGL features with the goal to improve rendering performance. When working with SSBOs I've experienced a crash in the driver on AMD platforms on both Windows and Linux. I'm using the proprietary drivers because Mesa does not yet support the required OpenGL features (which unfortunately also means I can't get any useful callstacks into the driver for troubleshooting). The crash could not be reproduced with NVidia hardware and drivers. I've investigated further and was able to write a relatively small test-program that crashes in the same way as my new experimental renderer for the game.
Here's the code:
It's based on Graham Sellers' example programs (you can get the other required files here: openglsuperbible/sb6code · GitHub ).
The example just renders a single triangle. It passes data using two SSBOs. One of these is used in both stages, vertex shader (VS) and fragment shader (FS).
The conditions in the shader are quite arbitrary and their only purpose is to ensure that the blocks are actually active in the shader.
If the block AColorBlock gets block ID 0, the program crashes in glDrawElements. You can rename the block to "ZColorBlock" for example to make it block 1 and avoid the crash. The crash can also be avoided by only using ColorIndexBlock in one shader stage or by using uniform buffers instead of SSBOs.
Am I doing anything wrong or might it be a driver bug?