Hi,
Here is a series bugs I encounter:
1 - nVidia drivers doesn’t support precision qualifier for input and output varyings.
2 - gl_ViewportIndex isn’t supported.
3 - nVidia drivers behave weirdly with precision qualifiers. On one side there are more of less discard, on other side there are interpreted as int8_t or int16_t which are defined in GL_NV_vertex_attrib_integer_64bit but I don’t use it.
4 - I have a misleading warning with the following simple shader:
0(21) : warning C7050: “GeomColor” might be used before being initialized
#version 400 core
layout(triangles, invocations = 6) in;
in vec3 VertColor[];
layout(stream = 0) out vec3 GeomColor;
uniform mat4 MVP;
void main()
{
for(int i = 0; i < gl_in.length(); ++i)
{
gl_Position = MVP * (gl_in[i].gl_Position + vec4(vec2(0.0), - 0.3 + float(0.1) * float(gl_InvocationID), 0.0));
GeomColor = (vec3(gl_InvocationID + 1) / 6.0 + VertColor[i]) / 2.0;
EmitVertex();
}
EndPrimitive();
}
It is followed by a invalid operation error at draw call.
5 - More misleading errors with a simple control shader:
#version 400 core
layout(vertices = 4) out;
in vert
{
vec4 Color;
} Vert[];
out cont
{
vec4 Color;
} Cont[];
void main()
{
gl_TessLevelInner[0] = 16.0;
gl_TessLevelInner[1] = 16.0;
gl_TessLevelOuter[0] = 8.0;
gl_TessLevelOuter[1] = 8.0;
gl_TessLevelOuter[2] = 8.0;
gl_TessLevelOuter[3] = 8.0;
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
Cont[gl_InvocationID].Color = Vert[gl_InvocationID].Color;
}
0(14) : error C5121: multiple bindings to output semantics
“ATTR0”
0(14) : error C5121: multiple bindings to output semantics “ATTR0”
0(14) : error C5121: multiple bindings to output semantics “ATTR0”
Yes, I have it 3 times…
6 - More geometry shader issue:
#version 410 core
// Declare all the semantics
#define ATTR_POSITION 0
#define ATTR_COLOR 3
#define ATTR_TEXCOORD 4
#define VERT_POSITION 0
#define VERT_COLOR 3
#define VERT_TEXCOORD 4
#define VERT_INSTANCE 7
#define GEOM_COLOR 3
#define FRAG_COLOR 0
#define FRAG_RED 0
#define FRAG_GREEN 1
#define FRAG_BLUE 2
#define FRAG_ALPHA 3
layout(triangles, invocations = 6) in;
layout(location = VERT_COLOR) in vec3 Color[];
layout(location = GEOM_COLOR, stream = 0) out vec3 GeomColor;
uniform mat4 MVP;
void main()
{
for(int i = 0; i < gl_in.length(); ++i)
{
gl_Position = MVP * (gl_in[i].gl_Position + vec4(vec2(0.0), - 0.3 + float(0.1) * float(gl_InvocationID), 0.0));
GeomColor = (vec3(gl_InvocationID + 1) / 6.0 + Color[i]) / 2.0;
EmitVertex();
}
EndPrimitive();
}
which generates the message: (0) fatal error C9999: *** exception during compilation ***
Actually, I didn’t manage to run any gemetry shader code…
Outch