From 1b4712719e3ad3433576f84afacb36891aa1a88e Mon Sep 17 00:00:00 2001 From: Andres Gomez Date: Thu, 20 Dec 2018 03:09:57 +0200 Subject: [PATCH 19/22] glsl: correctly validate component layout qualifier for dvec{3,4} From page 62 (page 68 of the PDF) of the GLSL 4.50 v.7 spec: " A dvec3 or dvec4 can only be declared without specifying a component." Therefore, using the "component" qualifier with a dvec3 or dvec4 should result in a compiling error. v2: enhance the error message (Timothy). Fixes: 94438578d21 ("glsl: validate and store component layout qualifier in GLSL IR") Cc: Timothy Arceri Cc: Kenneth Graunke Signed-off-by: Andres Gomez Reviewed-by: Timothy Arceri (cherry picked from commit a96093136bddfe17661f1de54228fe4b5618ba8a) --- src/compiler/glsl/ast_to_hir.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index 620153e6a34..ebb460962ff 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -3698,6 +3698,10 @@ apply_layout_qualifier_to_variable(const struct ast_type_qualifier *qual, "cannot be applied to a matrix, a structure, " "a block, or an array containing any of " "these."); + } else if (components > 4 && type->is_64bit()) { + _mesa_glsl_error(loc, state, "component layout qualifier " + "cannot be applied to dvec%u.", + components / 2); } else if (qual_component != 0 && (qual_component + components - 1) > 3) { _mesa_glsl_error(loc, state, "component overflow (%u > 3)", -- 2.21.0