Bug report: Linker error when using bindless vec3 readonly buffer

I use bindless buffers as specified in the GL_NV_shader_buffer_load extension, which in general work quite well. However, it occurred to me that my shaders do not work when specifying a three-component data type and using the readonly qualifier.

Consider this simple compute shader:

#version 450
#extension GL_NV_shader_buffer_load : enable

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

uniform restrict readonly vec3* aBuffer;

void main()
    vec3 test = aBuffer[0];

This shader will compile, but not link:

0(10) : error C1317: qualified actual parameter #1 cannot be converted to less qualified parameter ("addr")

Some facts I collected about this issue:

  • It only happens with the readonly memory qualifier. Without it, linking succeeds.
  • It happens as soon as any three-component data type is involved, including structs with one or more three-component components.
  • It does not happen for structs with three individual components, i.e. using struct A { float a; float b; float c; }; works like a charm.

I know that the use of three-component data types is questionable. What I want to point out is that there is a small set of circumstances that together lead to a linker error that does not really explain what the issue with the GLSL code is. If vec3 and its friends are not allowed at the readonly bindless buffer party, please clarify this in the compiler, not in the linker.

The system is Windows 8.1 Professional 64 bit, using a Geforce GTX 680 card with driver 361.91.