[Mesa-dev] [PATCH 8/9] Revert "glsl: allow layout qualifier overrides with ARB_shading_language_420pack"
Timothy Arceri
timothy.arceri at collabora.com
Mon Oct 24 03:11:12 UTC 2016
Patches 7 and 8 are:
Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>
On Sat, 2016-10-22 at 23:09 +0300, Andres Gomez wrote:
> This reverts commit aaa69c79cd584db4d9c6ea7794e93d29f3d54572.
>
> The commit was erroneous because the ast_layout_expression class is
> meant to hold a list used for an after check that all the declared
> values for a layout-qualifier-name are consistent.
>
> Therefore, the check for the possibility of duplicated values was
> previously fixed to happen much sooner, in the GLSL parser and the
> merge of layout qualifiers, and the process_qualifier_constant method
> only needs to check that the values are consistent.
>
> By now, those layout-qualifier-name represented as a
> ast_layout_expression are "max_vertices", "invocations", "vertices",
> "local_size_[x|y|z]" and "xfb_stride".
>
> From page 40 (page 46 of the PDF) of the GLSL 1.50 spec:
>
> " All geometry shader output layout declarations in a program must
> declare the same layout and same value for max_vertices."
>
> From page 44 (page 50 of the PDF) of the GLSL 4.00 spec:
>
> " If an invocation count is declared, all such declarations must
> specify the same count."
>
> From page 47 (page 53 of the PDF) of the GLSL 4.00 spec:
>
> " All tessellation control shader layout declarations in a program
> must specify the same output patch vertex count."
>
> From page 60 (page 66 of the PDF) of the GLSL 4.30 spec:
>
> " Also, if such a layout qualifier is declared more than once in
> the
> same shader, all those declarations must set the same set of
> local
> work-group sizes and set them to the same values; otherwise a
> compile-time error results. If multiple compute shaders attached
> to a single program object declare local work-group size, the
> declarations must be identical; otherwise a link-time error
> results."
>
> From page 73 (page 79 of the PDF) of the GLSL 4.40 spec:
>
> " While xfb_stride can be declared multiple times for the same
> buffer, it is a compile-time or link-time error to have different
> values specified for the stride for the same buffer."
>
> Fixes GL44-CTS.enhanced_layouts.xfb_duplicated_stride
>
> Signed-off-by: Andres Gomez <agomez at igalia.com>
> ---
> src/compiler/glsl/ast_type.cpp | 7 +------
> 1 file changed, 1 insertion(+), 6 deletions(-)
>
> diff --git a/src/compiler/glsl/ast_type.cpp
> b/src/compiler/glsl/ast_type.cpp
> index 0bd30ca..c0c7ec7 100644
> --- a/src/compiler/glsl/ast_type.cpp
> +++ b/src/compiler/glsl/ast_type.cpp
> @@ -744,12 +744,7 @@
> ast_layout_expression::process_qualifier_constant(struct
> _mesa_glsl_parse_state
> return false;
> }
>
> - /* From section 4.4 "Layout Qualifiers" of the GLSL 4.50 spec:
> - * "When the same layout-qualifier-name occurs multiple times,
> - * in a single declaration, the last occurrence overrides the
> - * former occurrence(s)."
> - */
> - if (!state->has_420pack() && !first_pass && *value !=
> const_int->value.u[0]) {
> + if (!first_pass && *value != const_int->value.u[0]) {
> YYLTYPE loc = const_expression->get_location();
> _mesa_glsl_error(&loc, state, "%s layout qualifier does not
> "
> "match previous declaration (%d vs %d)",
More information about the mesa-dev
mailing list