mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 06:10:13 +01:00
glsl: invariant qualifier is not valid for shader inputs in GLSL ES 3.00
GLSL ES 3.00 spec, chapter 4.6.1 "The Invariant Qualifier",
Only variables output from a shader can be candidates for invariance. This
includes user-defined output variables and the built-in output variables.
As only outputs can be declared as invariant, an invariant output from one
shader stage will still match an input of a subsequent stage without the
input being declared as invariant.
This patch fixes the following dEQP tests:
dEQP-GLES3.functional.shaders.qualification_order.variables.valid.invariant_interp_storage_precision
dEQP-GLES3.functional.shaders.qualification_order.variables.valid.invariant_interp_storage
dEQP-GLES3.functional.shaders.qualification_order.variables.valid.invariant_storage_precision
dEQP-GLES3.functional.shaders.qualification_order.variables.valid.invariant_storage
dEQP-GLES3.functional.shaders.qualification_order.variables.invalid.invariant_interp_storage_precision_invariant_input
dEQP-GLES3.functional.shaders.qualification_order.variables.invalid.invariant_interp_storage_invariant_input
dEQP-GLES3.functional.shaders.qualification_order.variables.invalid.invariant_storage_precision_invariant_input
dEQP-GLES3.functional.shaders.qualification_order.variables.invalid.invariant_storage_invariant_input
No piglit regressions observed.
v2:
- Add spec content in the code
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
e1ed4f2532
commit
426a50e208
2 changed files with 12 additions and 1 deletions
|
|
@ -1602,6 +1602,17 @@ type_qualifier:
|
|||
|
||||
$$ = $2;
|
||||
$$.flags.q.invariant = 1;
|
||||
|
||||
/* GLSL ES 3.00 spec, section 4.6.1 "The Invariant Qualifier":
|
||||
*
|
||||
* "Only variables output from a shader can be candidates for invariance.
|
||||
* This includes user-defined output variables and the built-in output
|
||||
* variables. As only outputs can be declared as invariant, an invariant
|
||||
* output from one shader stage will still match an input of a subsequent
|
||||
* stage without the input being declared as invariant."
|
||||
*/
|
||||
if (state->es_shader && state->language_version >= 300 && $$.flags.q.in)
|
||||
_mesa_glsl_error(&@1, state, "invariant qualifiers cannot be used with shader inputs");
|
||||
}
|
||||
| interpolation_qualifier type_qualifier
|
||||
{
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog,
|
|||
return;
|
||||
}
|
||||
|
||||
if (input->data.invariant != output->data.invariant) {
|
||||
if (!prog->IsES && input->data.invariant != output->data.invariant) {
|
||||
linker_error(prog,
|
||||
"%s shader output `%s' %s invariant qualifier, "
|
||||
"but %s shader input %s invariant qualifier\n",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue