Jordan Justen <jordan.l.jus...@intel.com> writes:

> Previously only 'uniform' was allowed for uniform blocks.
>
> Now, in/out can be parsed, but it will only be allowed for
> GLSL >= 150.


>  basic_interface_block:
> -     UNIFORM NEW_IDENTIFIER '{' member_list '}' instance_name_opt ';'
> +     interface_qualifier NEW_IDENTIFIER '{' member_list '}' 
> instance_name_opt ';'
>       {
>          ast_interface_block *const block = $6;
>  
>          block->block_name = $2;
>          block->declarations.push_degenerate_list_at_head(& $4->link);
>  
> -        if (!state->ARB_uniform_buffer_object_enable) {
> -           _mesa_glsl_error(& @1, state,
> -                            "#version 140 / GL_ARB_uniform_buffer_object "
> -                            "required for defining uniform blocks\n");
> -        } else if (state->ARB_uniform_buffer_object_warn) {
> -           _mesa_glsl_warning(& @1, state,
> -                              "#version 140 / GL_ARB_uniform_buffer_object "
> -                              "required for defining uniform blocks\n");
> +        if ($1.flags.q.uniform) {
> +           if (!state->ARB_uniform_buffer_object_enable) {
> +              _mesa_glsl_error(& @1, state,
> +                               "#version 140 / GL_ARB_uniform_buffer_object "
> +                               "required for defining uniform blocks\n");
> +           } else if (state->ARB_uniform_buffer_object_warn) {
> +              _mesa_glsl_warning(& @1, state,
> +                                 "#version 140 / 
> GL_ARB_uniform_buffer_object "
> +                                 "required for defining uniform blocks\n");
> +           }
> +        } else {
> +           if (state->es_shader || state->language_version < 150) {
> +              _mesa_glsl_error(& @1, state,
> +                              "#version 150 required for using "
> +                              "interface blocks.\n");
> +           }
>          }
>  
>          /* Since block arrays require names, and both features are added in
> @@ -1937,10 +1946,39 @@ basic_interface_block:
>                              "blocks with an instance name\n");
>          }
>  
> +        unsigned interface_type_mask, interface_type_flags;
> +        struct ast_type_qualifier temp_type_qualifier;
> +
> +        temp_type_qualifier.flags.i = 0;
> +        temp_type_qualifier.flags.q.uniform = true;
> +        temp_type_qualifier.flags.q.in = true;
> +        temp_type_qualifier.flags.q.out = true;
> +        interface_type_mask = temp_type_qualifier.flags.i;
> +        interface_type_flags = $1.flags.i & interface_type_mask;
> +        block->layout.flags.i |= interface_type_flags;

Given that an interface_qualifier ($1) only has either uniform, in, or
out set, I don't see why this masking is needed.

Attachment: pgpHn7EY1psNf.pgp
Description: PGP signature

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

Reply via email to