[Mesa-dev] [PATCH] glsl: Reject TCS/TES input arrays not sized to gl_MaxPatchVertices.

Francisco Jerez currojerez at riseup.net
Wed Aug 31 19:30:31 UTC 2016


Kenneth Graunke <kenneth at whitecape.org> writes:

> We handled the unsized case, implicitly sizing arrays to the value
> of gl_MaxPatchVertices.  But if a size was present, we failed to
> raise a compile error if it wasn't the value of gl_MaxPatchVertices.
>
> Fixes CTS tests:
>
>   *.tessellation_shader.compilation_and_linking_errors.
>   {tc,te}_invalid_array_size_used_for_input_blocks
>
> Piglit's tcs-input-read-nonconst-* tests would be broken by this patch,
> but the tests are wrong.  I've submitted a patch to fix those.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>

Reviewed-by: Francisco Jerez <currojerez at riseup.net>

> ---
>  src/compiler/glsl/ast_to_hir.cpp | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
> index 6e9c32e..a7f297e 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -4344,10 +4344,23 @@ handle_tess_shader_input_decl(struct _mesa_glsl_parse_state *state,
>     if (var->data.patch)
>        return;
>  
> -   /* Unsized arrays are implicitly sized to gl_MaxPatchVertices. */
> +   /* The ARB_tessellation_shader spec says:
> +    *
> +    *    "Declaring an array size is optional.  If no size is specified, it
> +    *     will be taken from the implementation-dependent maximum patch size
> +    *     (gl_MaxPatchVertices).  If a size is specified, it must match the
> +    *     maximum patch size; otherwise, a compile or link error will occur."
> +    *
> +    * This text appears twice, once for TCS inputs, and again for TES inputs.
> +    */
>     if (var->type->is_unsized_array()) {
>        var->type = glsl_type::get_array_instance(var->type->fields.array,
>              state->Const.MaxPatchVertices);
> +   } else if (var->type->length != state->Const.MaxPatchVertices) {
> +      _mesa_glsl_error(&loc, state,
> +                       "per-vertex tessellation shader input arrays must be "
> +                       "sized to gl_MaxPatchVertices (%d).",
> +                       state->Const.MaxPatchVertices);
>     }
>  }
>  
> -- 
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160831/c6240105/attachment-0001.sig>


More information about the mesa-dev mailing list