glsl: only validate xfb_buffer values when we have enhanced layouts
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 4 Feb 2022 01:42:40 +0000 (20:42 -0500)
committerMarge Bot <emma+marge@anholt.net>
Wed, 9 Feb 2022 03:31:16 +0000 (03:31 +0000)
XFB might not be supported, and the shader wouldn't be setting this
flag. But validation would still fail, since the number of xfb buffers
would be 0. So only validate if an xfb_buffer is set in the qualifiers.

See: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5415
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14869>

src/compiler/glsl/ast_to_hir.cpp

index 5a6760b..9684203 100644 (file)
@@ -8098,11 +8098,13 @@ ast_interface_block::hir(exec_list *instructions,
       return NULL;
    }
 
-   unsigned qual_xfb_buffer;
-   if (!process_qualifier_constant(state, &loc, "xfb_buffer",
-                                   layout.xfb_buffer, &qual_xfb_buffer) ||
-       !validate_xfb_buffer_qualifier(&loc, state, qual_xfb_buffer)) {
-      return NULL;
+   unsigned qual_xfb_buffer = 0;
+   if (layout.flags.q.xfb_buffer) {
+      if (!process_qualifier_constant(state, &loc, "xfb_buffer",
+                                      layout.xfb_buffer, &qual_xfb_buffer) ||
+          !validate_xfb_buffer_qualifier(&loc, state, qual_xfb_buffer)) {
+         return NULL;
+      }
    }
 
    unsigned qual_xfb_offset = 0;