glsl: Allow invariant qualifer in block members in desktop OpenGL.
Feedback from Khronos is that 'invariant' should be allowed on block
members for desktop OpenGL. Fix piglit regression added by fe1e89a0
:
invariant-qualifier-in-out-block-01.vert
v2:
- Allow it for in/out blocks in OpenGL ES too, so when OES_shader_io_blocks
is supported we don't need to do any change (Timothy)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89330
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
This commit is contained in:
@@ -944,27 +944,11 @@ _mesa_ast_process_interface_block(YYLTYPE *locp,
|
||||
"the interface block");
|
||||
}
|
||||
|
||||
/* From GLSL ES 3.0, chapter 4.3.7 "Interface Blocks":
|
||||
*
|
||||
* "GLSL ES 3.0 does not support interface blocks for shader inputs or
|
||||
* outputs."
|
||||
*
|
||||
* And from GLSL ES 3.0, chapter 4.6.1 "The invariant qualifier":.
|
||||
*
|
||||
* "Only variables output from a shader can be candidates for
|
||||
* invariance."
|
||||
*
|
||||
* From GLSL 4.40 and GLSL 1.50, section "Interface Blocks":
|
||||
*
|
||||
* "If optional qualifiers are used, they can include interpolation
|
||||
* qualifiers, auxiliary storage qualifiers, and storage qualifiers
|
||||
* and they must declare an input, output, or uniform member
|
||||
* consistent with the interface qualifier of the block"
|
||||
*/
|
||||
if (qualifier.flags.q.invariant)
|
||||
if (!(q.flags.q.in || q.flags.q.out) && qualifier.flags.q.invariant)
|
||||
_mesa_glsl_error(locp, state,
|
||||
"invariant qualifiers cannot be used "
|
||||
"with interface blocks members");
|
||||
"invariant qualifiers can be used only "
|
||||
"in interface block members for shader "
|
||||
"inputs or outputs");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user