Bug 100316 - Linking GLSL 1.30 shaders with invariant and deprecated variables triggers an 'mismatching invariant qualifiers' error
Summary: Linking GLSL 1.30 shaders with invariant and deprecated variables triggers an...
Status: NEW
Alias: None
Product: Mesa
Classification: Unclassified
Component: glsl-compiler (show other bugs)
Version: 17.2
Hardware: All All
: medium normal
Assignee: mesa-dev
QA Contact: Intel 3D Bugs Mailing List
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-03-22 11:16 UTC by Olivier Lauffenburger
Modified: 2018-09-07 08:13 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Olivier Lauffenburger 2017-03-22 11:16:35 UTC
I have the following GLSL 1.30 vertex and pixel shaders:

* Vertex shader:

#version 130

flat out vec4 triangleColor;

invariant gl_Position;

void main()
{
	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
	gl_ClipVertex = gl_ModelViewMatrix * gl_Vertex;
    
	triangleColor = vec4(1.0, 1.0, 0.0, 1.0);
}

* Fragment shader:

#version 130

precision highp float;

flat in vec4 triangleColor;

void main()
{
	gl_FragColor = gl_Color * triangleColor;
}

Compilation is OK but linking fails with error:

error: declarations for uniform `gl_ModelViewProjectionMatrix' have mismatching invariant qualifiers

Slightly different vertex shaders can produce the error:

error: declarations for shader input `gl_Vertex' have mismatching invariant qualifiers

There is no linking error anymore when I remove the "invariant gl_Position;" declaration.

Given that gl_Vertex and gl_ModelViewProjectionMatrix are not output variables for vertex shaders, I suppose that this behavior is not expected.

This error occurs with Mesa 17.0.2.
Comment 1 Daniel Gibson 2017-10-28 23:01:58 UTC
I ran into the same bug, on Ubuntu 17.04 with both Mesa 17.0.7-0ubuntu0.17.04.1 and 17.2.2+git20171019+17.2.23c08dab-0ubuntu0ricotz~17.04.1 (from the xorg-edgers ppa).
I have observed this bug both with Intel (Iris Pro 5200) and AMD (Radeon R7 370) GPUs.

It doesn't only happen with deprecated variables, but also when using a OpenGL core (3.2) context and corresponding shaders, by adding "invariant gl_Position;" to a vertex shader (doesn't seem to affect all vertex shaders, though).

It can be reproduced with this branch of Yamagi Quake2: https://github.com/DanielGibson/yquake2/tree/mesa-100316 (start with ./quake2 +set vid_renderer gl3)

The corresponding source is: https://github.com/DanielGibson/yquake2/blob/mesa-100316/src/client/refresh/gl3/gl3_shaders.c#L328-L329
(https://github.com/DanielGibson/yquake2/blob/mesa-100316/src/client/refresh/gl3/gl3_shaders.c#L261-L288 is also part of the shader)

When adding "invariant gl_Position;" into my simpler vertexSrc2D shader (https://github.com/DanielGibson/yquake2/blob/mesa-100316/src/client/refresh/gl3/gl3_shaders.c#L166), it does not create an error there.

As Olivier wrote, compiling the shader gives no errors, but linking the vertex- and fragment-shaders into a program fails.
The error message doesn't even mention gl_Position directly, but some other variable (in my case "error: declarations for uniform `transModel' have mismatching invariant qualifiers") - but when commenting the "invariant gl_Position;" line out, it works.
Comment 2 Rémi Verschelde 2017-12-03 13:57:16 UTC
We're hitting the same issue with `invariant gl_Position;` (as described by Daniel in comment 1) in Godot Engine, at least for AMD hardware. Godot uses OpenGL 3.3 Core Profile: https://github.com/godotengine/godot/issues/13450
Comment 3 Danylo 2018-09-07 08:13:56 UTC
I've sent the patch for more general manifestation of the issue: https://patchwork.freedesktop.org/patch/247067/


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.