I don’t have access to any GL 4.x hardware, so I was curious about something. The OpenGL minimum for the number of atomic counter and image variables requires implementations to allow at least 8 atomic counter variables and image variables. But only in the fragment shader; in other shader stages, the minimum requirement is 0, thus letting implementations disallow their use in those stages.
Is that a common thing for 4.x-class hardware to do? Or can you reasonably expect 4.x hardware to allow similar image/atomic counter operations in non-fragment shader stages?
My ATI 5800 has 8 atomic buffers and counters in each stage with a combined max of 9. When I tried to retrieve GL_MAX_VERTEX_IMAGE_UNIFORMS etc I get an invalid value error.
Edit: I just had a look at the Radeon 6350. Even there you got 8 image uniform max per stage but also just 8 max combined uniforms. The same goes for atomic counters and atomic counter buffers: 8 max per stage, 8 max combined.
Although I’d be hesitant to state that you can commonly expect this behavior to be common among all GL 4.x class hardware, having access on very low-end models seems to be a good indication that in fact you might be able to.
It’s a shame Intel doesn’t go beyond GL 4.0.
Edit 2: Ok, somethings definitely not right. My HD 6870 reports the same numbers as above. If that is actually the case, it’s a joke compared to the 580.