[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