I encountered this while running GZDoom after updating my machine to the latest Intel driver.
That program shows an error about not allowing an unsized array at the end of a shader storage buffer, complaining about
ERROR: 0:64: ‘array without size’ : supported in geometry shaders only
with a rat’s tail of other errors as a result of an apparently confused parser.
So what gives? I have been under the impression that this is a valid construct as the specification contains this example:
// Shader storage block holding an array <fragments> declared without
// a fixed size. Application code should determine how many fragments
// it wants to record and allocate a buffer appropriately. With the
// "std140" layout, each FragmentData record will take 32B. With other
// layouts, the stride of the array is implementation-dependent. The
// "binding=2" layout qualifier says that the block <Fragments> should
// be associated with shader storage buffer binding point #2.
layout(std140, binding=2) buffer Fragments {
FragmentData fragments[];
};
The buffer declaration the compiler complains about - and which compiles without problems on the same machine with the primary NVidia card being selected:
layout(std430, binding = 1) buffer LightBufferSSO
{
vec4 lights[];
};