[Piglit] [PATCH v2] unsized_array_member: It should expect link success instead of link error
Ian Romanick
idr at freedesktop.org
Sat Jun 16 01:23:28 UTC 2018
On 06/14/2018 12:27 PM, Eleni Maria Stea wrote:
> Modified the unsized_array_member.shader_test to expect successful
> linking instead of linker error.
>
> According to the GLSLang Specification (version 4.60 Section 4.2 Scoping):
>
> "An array implicitly sized in one shader can be explicitly sized by
> another shader in the same stage. If no shader in a stage has an explicit
> size for the array, the largest implicit size (one more than the largest
> index used) in that stage is used. There is no cross-stage array sizing.
> If there is no static access to an implicitly sized array within the stage
> declaring it, then the array is given a size of 1, which is relevant when
> the array is declared within an interface block that is shared with other
> stages or the application (other unused arrays might be eliminated by the
> optimizer)."
>
> This means that the unused array s of the following shader block in the
> unsized_array_member.shader_test:
> buffer a {
> vec4 s[];
> vec4 a[];
> } b;
> should be an array of size 1 and not an unsized array, and so no linker
> error should be generated.
>
> Ref: https://bugs.freedesktop.org/show_bug.cgi?id=106915
>
> v2:
> - replaces the comment at the top with the relevant part of the spec
> ---
> .../linker/unsized_array_member.shader_test | 20 ++++++++++---------
> 1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/tests/spec/arb_shader_storage_buffer_object/linker/unsized_array_member.shader_test b/tests/spec/arb_shader_storage_buffer_object/linker/unsized_array_member.shader_test
> index 47d0483ac..54468bbc9 100644
> --- a/tests/spec/arb_shader_storage_buffer_object/linker/unsized_array_member.shader_test
> +++ b/tests/spec/arb_shader_storage_buffer_object/linker/unsized_array_member.shader_test
> @@ -1,12 +1,14 @@
> -# From ARB_program_interface_query spec:
> +# From GLSLang Spec 4.60 Section 4.2 Scoping:
Like I mentioned in the bug, GLSLang is a particular implementation of
the spec. Please use the canonical form at for spec references.
Section 4.2 (Scoping) of the OpenGL Shading Language 4.6 specification says:
> #
> -# "For the property of BUFFER_DATA_SIZE, then the implementation-dependent
> -# minimum total buffer object size, in basic machine units, required to
> -# hold all active variables associated with an active uniform block, shader
> -# storage block, or atomic counter buffer is written to <params>. If the
> -# final member of an active shader storage block is array with no declared
> -# size, the minimum buffer size is computed assuming the array was declared
> -# as an array with one element."
> +# "An array implicitly sized in one shader can be explicitly sized by
> +# another shader in the same stage. If no shader in a stage has an
> +# explicit size for the array, the largest implicit size (one more than
> +# the largest index used) in that stage is used. There is no cross-stage
> +# array sizing. If there is no static access to an implicitly sized array
> +# within the stage declaring it, then the array is given a size of 1,
> +# which is relevant when the array is declared within an interface block
> +# that is shared with other stages or the application (other unused arrays
> +# might be eliminated by the optimizer)."
Please keep the same indentation style.
>
> [require]
> GLSL >= 1.50
> @@ -31,4 +33,4 @@ void main(void) {
> }
>
> [test]
> -link error
> +link success
>
More information about the Piglit
mailing list