[Mesa-dev] [PATCH v2] glsl: do not allow interface block to have name already taken

Ian Romanick idr at freedesktop.org
Wed Jan 21 13:37:38 PST 2015


Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 01/20/2015 09:45 PM, Tapani Pälli wrote:
> Fixes currently failing Piglit case
>    interface-blocks-name-reused-globally.vert
> 
> v2: combine var declaration with assignment (Ian)
> 
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
>  src/glsl/ast_to_hir.cpp | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index 811a955..1ba29f7 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -5443,9 +5443,23 @@ ast_interface_block::hir(exec_list *instructions,
>  
>     state->struct_specifier_depth--;
>  
> -   if (!redeclaring_per_vertex)
> +   if (!redeclaring_per_vertex) {
>        validate_identifier(this->block_name, loc, state);
>  
> +      /* From section 4.3.9 ("Interface Blocks") of the GLSL 4.50 spec:
> +       *
> +       *     "Block names have no other use within a shader beyond interface
> +       *     matching; it is a compile-time error to use a block name at global
> +       *     scope for anything other than as a block name."
> +       */
> +      ir_variable *var = state->symbols->get_variable(this->block_name);
> +      if (var && !var->type->is_interface()) {
> +         _mesa_glsl_error(&loc, state, "Block name `%s' is "
> +                          "already used in the scope.",
> +                          this->block_name);
> +      }
> +   }
> +
>     const glsl_type *earlier_per_vertex = NULL;
>     if (redeclaring_per_vertex) {
>        /* Find the previous declaration of gl_PerVertex.  If we're redeclaring
> 



More information about the mesa-dev mailing list