On 31 August 2012 16:04, Kenneth Graunke <span dir="ltr"><<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
According to the GLSL 4.30 specification, this is a compile time error.<br>
Earlier specifications don't specify a behavior, but since 0 and 1 are<br>
the only valid indices for dual source blending, it makes sense to<br>
generate the error.<br>
<br>
Fixes (the fixed version of) piglit's layout-12.frag.<br>
<br>
NOTE: This is a candidate for the 9.0 branch.<br>
<br>
Signed-off-by: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>><br>
---<br>
 src/glsl/ast_to_hir.cpp | 17 +++++++++++++++--<br>
 1 file changed, 15 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp<br>
index 02fe66b..becf6f9 100644<br>
--- a/src/glsl/ast_to_hir.cpp<br>
+++ b/src/glsl/ast_to_hir.cpp<br>
@@ -2086,9 +2086,22 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,<br>
         } else {<br>
            var->location = qual->location;<br>
         }<br>
+<br>
         if (qual->flags.q.explicit_index) {<br>
-           var->explicit_index = true;<br>
-           var->index = qual->index;<br>
+            /* From the GLSL 4.30 specification: "It is also a compile-time<br>
+             * error if a fragment shader sets a layout index to less than 0<br>
+             * or greater than 1."<br></blockquote><div><br>Minor nit pick: would you mind referencing the section of the spec this quote comes from (4.4.2 Output Layout Qualifiers)?<br><br>Other than that, this patch is:<br>
<br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+             *<br>
+             * Older specifications don't mandate a behavior; we take this<br>
+             * as a clarification and always generate the error.<br>
+             */<br>
+            if (qual->index < 0 || qual->index > 1) {<br>
+               _mesa_glsl_error(loc, state,<br>
+                                "explicit index may only be 0 or 1\n");<br>
+            } else {<br>
+               var->explicit_index = true;<br>
+               var->index = qual->index;<br>
+            }<br>
         }<br>
       }<br>
    } else if (qual->flags.q.explicit_index) {<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.11.4<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br>