[Mesa-dev] [PATCH v2] main: buffer array variables can have array size of 0 if they are unsized

Timothy Arceri t_arceri at yahoo.com.au
Tue Oct 6 03:59:26 PDT 2015


On Tue, 2015-10-06 at 10:08 +0200, Samuel Iglesias Gonsalvez wrote:
> From ARB_program_query_interface:
> 
>   For the property ARRAY_SIZE, a single integer identifying the
> number of
>   active array elements of an active variable is written to <params>.
> The
>   array size returned is in units of the type associated with the
> property
>   TYPE. For active variables not corresponding to an array of basic
> types,
>   the value one is written to <params>. If the variable is a shader
>   storage block member in an array with no declared size, the value
> zero
>   is written to <params>.
> 
> v2:
> 
> - Unsized arrays of arrays have an array size different than zero
> 
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> ---
>  src/mesa/main/shader_query.cpp | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/main/shader_query.cpp
> b/src/mesa/main/shader_query.cpp
> index dfc39f6..17076b8 100644
> --- a/src/mesa/main/shader_query.cpp
> +++ b/src/mesa/main/shader_query.cpp
> @@ -1304,8 +1304,12 @@ _mesa_program_resource_prop(struct
> gl_shader_program *shProg,
>        switch (res->Type) {
>        case GL_UNIFORM:
>        case GL_BUFFER_VARIABLE:
> +         if (RESOURCE_UNI(res)->is_shader_storage &&
> +             RESOURCE_UNI(res)->is_unsized_array)
> +            *val = RESOURCE_UNI(res)->array_elements;

You don't need RESOURCE_UNI(res)->is_unsized_array here anymore right? 

RESOURCE_UNI(res)->is_shader_storage is all you need so you can also
drop the patch that adds is_unsized_array to the uniform storage struct

With that change: Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>


> +         else
>              *val = MAX2(RESOURCE_UNI(res)->array_elements, 1);
> -            return 1;
> +         return 1;
>        case GL_PROGRAM_INPUT:
>        case GL_PROGRAM_OUTPUT:
>           *val = MAX2(_mesa_program_resource_array_size(res), 1);


More information about the mesa-dev mailing list