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

Chema Casanova jmcasanova at igalia.com
Wed Feb 15 14:21:22 UTC 2017


I've forgot the --annotate to submit this comment about this patch, so
here it is:

This patch fixes an incorrect behavior exposed by the piglit tests about
SSBOs
and unsized arrays submitted by Dave Airlie not yet in master
https://lists.freedesktop.org/archives/piglit/2016-May/019852.html

Chema

El 15/02/17 a las 15:12, Jose Maria Casanova Crespo escribió:
> 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