[Mesa-dev] [PATCH] glsl: link error if unsized array not-last in ssbo

Iago Toral itoral at igalia.com
Fri Feb 17 11:51:58 UTC 2017


Reviewed-by: Iago Toral Quiroga <itoral at igali.com>

You can also add the new piglit tests that this fixes to the commit
log.

Iago 

On Wed, 2017-02-15 at 15:12 +0100, Jose Maria Casanova Crespo wrote:
> If an unsized declared array is not the last in an SSBO
> and an implicit size can not be defined on linking time,
> the linker should raise an error instead of reaching
> an assertion on GL.
> 
> This reverts part of commit 3da08e166415a745139c1127040a24e8a45dc553
> getting back to the behavior of commit
> 5b2675093e863a52b610f112884ae12d42513770
> 
> The original patch was correct for GLES that should produce
> a compile-time error but the linker error is still necessary in
> desktop GL.
> 
> Signed-off-by: Jose Maria Casanova Crespo <jmcasanova at igalia.com>
> ---
>  src/compiler/glsl/link_uniform_blocks.cpp | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compiler/glsl/link_uniform_blocks.cpp
> b/src/compiler/glsl/link_uniform_blocks.cpp
> index ba01269..839fd07 100644
> --- a/src/compiler/glsl/link_uniform_blocks.cpp
> +++ b/src/compiler/glsl/link_uniform_blocks.cpp
> @@ -146,7 +146,13 @@ private:
>         */
>        const glsl_type *type_for_size = type;
>        if (type->is_unsized_array()) {
> -         assert(last_field);
> +         if (!last_field) {
> +            linker_error(prog, "unsized array `%s' definition: "
> +                         "only last member of a shader storage block
> "
> +                         "can be defined as unsized array",
> +                         name);
> +         }
> +
>           type_for_size = type->without_array();
>        }
>  


More information about the mesa-dev mailing list