Re: [Mesa-dev] [PATCH 07/10] glsl: don't allow invariant qualifiers for interface blocks in GLSL ES

2014-12-03 Thread Samuel Iglesias Gonsálvez
On Tuesday, December 02, 2014 12:57:24 PM Ian Romanick wrote:
 On 12/01/2014 05:04 AM, Eduardo Lima Mitev wrote:
  From: Samuel Iglesias Gonsalvez sigles...@igalia.com
  
  From GLSL ES 3.0, chapter 4.3.7 Interface Blocks, page 38:
  
  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, page 52.
  
  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.
  
  From GLSL ES 1.0, chapter 4.6.1 The invariant qualifier, page 37.
  
  Only the following variables may be declared as invariant:
  * Built-in special variables output from the vertex shader
  * Varying variables output from the vertex shader
  * Built-in special variables input to the fragment shader
  * Varying variables input to the fragment shader
  * Built-in special variables output from the fragment shader.
  
  This patch fixes the following dEQP tests:
  
  dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant_
  uniform_block_2_vertex
  dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant
  _uniform_block_2_fragment
 I'm pretty sure you can't have an invariant uniform block in desktop
 OpenGL either.  Should this change also apply universally to desktop OpenGL?

OK, I checked GLSL 1.50 and GLSL 4.40 specs, they both say the same in 
Interface Blocks section:

If no optional qualifier is used in a member-declaration, the qualification of 
the member includes all in, out, patch, uniform, or buffer as determined by 
interface-qualifier. 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

I'm going to do apply this change  to desktop OpenGL and add this paragraph to 
both the commit log and the comment bellow. 

Thanks!

Sam

  No piglit regressions.
  
  Signed-off-by: Samuel Iglesias Gonsalvez sigles...@igalia.com
  ---
  
   src/glsl/glsl_parser.yy | 25 +
   1 file changed, 25 insertions(+)
  
  diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
  index 55b3a7d..489d3af 100644
  --- a/src/glsl/glsl_parser.yy
  +++ b/src/glsl/glsl_parser.yy
  
  @@ -2519,6 +2519,31 @@ basic_interface_block:
interface block member does not match 
the interface block);

}
  
  + /* From GLSL ES 3.0, chapter 4.3.7 Interface Blocks, page 38:
  +  *
  +  * 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, page 52. +  *
  +  * 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.
  +  *
  +  * From GLSL ES 1.0, chapter 4.6.1 The invariant qualifier,
  page 37. +  *
  +  * Only the following variables may be declared as invariant:
  +  *  * Built-in special variables output from the vertex shader
  +  *  * Varying variables output from the vertex shader
  +  *  * Built-in special variables input to the fragment shader
  +  *  * Varying variables input to the fragment shader
  +  *  * Built-in special variables output from the fragment
  shader. +  */
  + if (state-es_shader  qualifier.flags.q.invariant)
  +_mesa_glsl_error(@1, state, invariant qualifiers cannot be
  used with interface blocks in GLSL ES); 
 }
 
 $$ = block;
 
 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev


signature.asc
Description: This is a digitally signed message part.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 07/10] glsl: don't allow invariant qualifiers for interface blocks in GLSL ES

2014-12-02 Thread Ian Romanick
On 12/01/2014 05:04 AM, Eduardo Lima Mitev wrote:
 From: Samuel Iglesias Gonsalvez sigles...@igalia.com
 
 From GLSL ES 3.0, chapter 4.3.7 Interface Blocks, page 38:
 
 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, page 52.
 
 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.
 
 From GLSL ES 1.0, chapter 4.6.1 The invariant qualifier, page 37.
 
 Only the following variables may be declared as invariant:
 * Built-in special variables output from the vertex shader
 * Varying variables output from the vertex shader
 * Built-in special variables input to the fragment shader
 * Varying variables input to the fragment shader
 * Built-in special variables output from the fragment shader.
 
 This patch fixes the following dEQP tests:
 
 dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant_uniform_block_2_vertex
 dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant_uniform_block_2_fragment

I'm pretty sure you can't have an invariant uniform block in desktop
OpenGL either.  Should this change also apply universally to desktop OpenGL?

 No piglit regressions.
 
 Signed-off-by: Samuel Iglesias Gonsalvez sigles...@igalia.com
 ---
  src/glsl/glsl_parser.yy | 25 +
  1 file changed, 25 insertions(+)
 
 diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
 index 55b3a7d..489d3af 100644
 --- a/src/glsl/glsl_parser.yy
 +++ b/src/glsl/glsl_parser.yy
 @@ -2519,6 +2519,31 @@ basic_interface_block:
   interface block member does not match 
   the interface block);
   }
 + /* From GLSL ES 3.0, chapter 4.3.7 Interface Blocks, page 38:
 +  *
 +  * 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, 
 page 52.
 +  *
 +  * 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.
 +  *
 +  * From GLSL ES 1.0, chapter 4.6.1 The invariant qualifier, page 
 37.
 +  *
 +  * Only the following variables may be declared as invariant:
 +  *  * Built-in special variables output from the vertex shader
 +  *  * Varying variables output from the vertex shader
 +  *  * Built-in special variables input to the fragment shader
 +  *  * Varying variables input to the fragment shader
 +  *  * Built-in special variables output from the fragment shader.
 +  */
 + if (state-es_shader  qualifier.flags.q.invariant)
 +_mesa_glsl_error(@1, state, invariant qualifiers cannot be 
 used with interface blocks in GLSL ES);
}
  
$$ = block;
 

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 07/10] glsl: don't allow invariant qualifiers for interface blocks in GLSL ES

2014-12-01 Thread Eduardo Lima Mitev
From: Samuel Iglesias Gonsalvez sigles...@igalia.com

From GLSL ES 3.0, chapter 4.3.7 Interface Blocks, page 38:

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, page 52.

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.

From GLSL ES 1.0, chapter 4.6.1 The invariant qualifier, page 37.

Only the following variables may be declared as invariant:
* Built-in special variables output from the vertex shader
* Varying variables output from the vertex shader
* Built-in special variables input to the fragment shader
* Varying variables input to the fragment shader
* Built-in special variables output from the fragment shader.

This patch fixes the following dEQP tests:

dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant_uniform_block_2_vertex
dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant_uniform_block_2_fragment

No piglit regressions.

Signed-off-by: Samuel Iglesias Gonsalvez sigles...@igalia.com
---
 src/glsl/glsl_parser.yy | 25 +
 1 file changed, 25 insertions(+)

diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index 55b3a7d..489d3af 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -2519,6 +2519,31 @@ basic_interface_block:
  interface block member does not match 
  the interface block);
  }
+ /* From GLSL ES 3.0, chapter 4.3.7 Interface Blocks, page 38:
+  *
+  * 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, 
page 52.
+  *
+  * 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.
+  *
+  * From GLSL ES 1.0, chapter 4.6.1 The invariant qualifier, page 37.
+  *
+  * Only the following variables may be declared as invariant:
+  *  * Built-in special variables output from the vertex shader
+  *  * Varying variables output from the vertex shader
+  *  * Built-in special variables input to the fragment shader
+  *  * Varying variables input to the fragment shader
+  *  * Built-in special variables output from the fragment shader.
+  */
+ if (state-es_shader  qualifier.flags.q.invariant)
+_mesa_glsl_error(@1, state, invariant qualifiers cannot be used 
with interface blocks in GLSL ES);
   }
 
   $$ = block;
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev