[Mesa-dev] [PATCH v3 4/6] main: buffer array variables can have array size of 0 if they are unsized
Timothy Arceri
t_arceri at yahoo.com.au
Wed Oct 7 15:32:25 PDT 2015
On Wed, 2015-10-07 at 09:21 +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
>
> v3:
> - Arrays and unsized arrays will have an array_stride > 0. Use it
> instead of is_unsized_array flag (Timothy).
>
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>
> ---
> src/mesa/main/shader_query.cpp | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/shader_query.cpp
> b/src/mesa/main/shader_query.cpp
> index 3748b10..3bf4311 100644
> --- a/src/mesa/main/shader_query.cpp
> +++ b/src/mesa/main/shader_query.cpp
> @@ -1306,8 +1306,15 @@ _mesa_program_resource_prop(struct
> gl_shader_program *shProg,
> switch (res->Type) {
> case GL_UNIFORM:
> case GL_BUFFER_VARIABLE:
> + /* Test if a buffer variable is an array or an unsized
> array.
> + * Unsized arrays return zero as array size.
> + */
> + if (RESOURCE_UNI(res)->is_shader_storage &&
> + RESOURCE_UNI(res)->array_stride > 0)
> + *val = RESOURCE_UNI(res)->array_elements;
> + 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