[Mesa-dev] [PATCH V2 3/3] glsl: reject invalid input layout qualifiers

Samuel Iglesias Gonsálvez siglesias at igalia.com
Mon Feb 22 13:25:51 UTC 2016


On Sun, 2016-02-14 at 20:28 +1100, Timothy Arceri wrote:
> Global in validation is already handled, this will do the validation
> for variables, blocks and block members.
> 
> This fixes some CTS tests for the new enhanced layouts transform
> feedback qualifiers.
> 
> V2: add some more valid input flags
> ---
>  src/compiler/glsl/ast_type.cpp | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 
> diff --git a/src/compiler/glsl/ast_type.cpp
> b/src/compiler/glsl/ast_type.cpp
> index f7c89af..ed43e7c 100644
> --- a/src/compiler/glsl/ast_type.cpp
> +++ b/src/compiler/glsl/ast_type.cpp
> @@ -147,6 +147,29 @@ ast_type_qualifier::merge_qualifier(YYLTYPE
> *loc,
>     stream_layout_mask.flags.i = 0;
>     stream_layout_mask.flags.q.stream = 1;
>  
> +   /* FIXME: We should probably do interface and function param
> validation
> +    * separately.
> +    */

I prefer to have them separate but we can do it later.

> +   ast_type_qualifier input_layout_mask;
> +   input_layout_mask.flags.i = 0;
> +   input_layout_mask.flags.q.centroid = 1;
> +   /* Function params can have constant */
> +   input_layout_mask.flags.q.constant = 1;
> +   input_layout_mask.flags.q.explicit_component = 1;

explicit_component is not defined in current master. I suppose this
patch applies on top of your enhanced layout changes.

If you plan to push it to master now, remember to remove it.

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>

Sam

> +   input_layout_mask.flags.q.explicit_location = 1;
> +   input_layout_mask.flags.q.flat = 1;
> +   input_layout_mask.flags.q.in = 1;
> +   input_layout_mask.flags.q.invariant = 1;
> +   input_layout_mask.flags.q.noperspective = 1;
> +   input_layout_mask.flags.q.origin_upper_left = 1;
> +   /* Function params 'inout' will set this */
> +   input_layout_mask.flags.q.out = 1;
> +   input_layout_mask.flags.q.patch = 1;
> +   input_layout_mask.flags.q.pixel_center_integer = 1;
> +   input_layout_mask.flags.q.precise = 1;
> +   input_layout_mask.flags.q.sample = 1;
> +   input_layout_mask.flags.q.smooth = 1;
> +
>     /* Uniform block layout qualifiers get to overwrite each
>      * other (rightmost having priority), while all other
>      * qualifiers currently don't allow duplicates.
> @@ -271,6 +294,13 @@ ast_type_qualifier::merge_qualifier(YYLTYPE
> *loc,
>  
>     this->flags.i |= q.flags.i;
>  
> +   if (this->flags.q.in &&
> +       (this->flags.i & ~input_layout_mask.flags.i) != 0) {
> +      _mesa_glsl_error(loc, state,
> +		       "invalid input layout qualifier used");
> +      return false;
> +   }
> +
>     if (q.flags.q.explicit_location)
>        this->location = q.location;
>  


More information about the mesa-dev mailing list