glsl: relax stage restrictions on layout defaults for outputs
authorTimothy Arceri <timothy.arceri@collabora.com>
Mon, 18 Jan 2016 09:46:29 +0000 (20:46 +1100)
committerTimothy Arceri <timothy.arceri@collabora.com>
Thu, 31 Mar 2016 01:50:04 +0000 (12:50 +1100)
The new xfb_buffer and xfb_stride global qualifiers are allowed in
geom, tess and vertex stages.

Reviewed-by: Dave Airlie <airlied@redhat.com>
src/compiler/glsl/ast_type.cpp
src/compiler/glsl/glsl_parser_extras.cpp

index ab86577cc3e64828e989b9b0fc0403d2ed578e44..8a3b175b63b77ca777fbf58d7bbdb256e2a7f9f9 100644 (file)
@@ -381,9 +381,10 @@ ast_type_qualifier::merge_out_qualifier(YYLTYPE *loc,
       if (create_node) {
          node = new(mem_ctx) ast_tcs_output_layout(*loc);
       }
-   } else {
+   } else if (!(state->stage == MESA_SHADER_TESS_EVAL ||
+                state->stage == MESA_SHADER_VERTEX)) {
       _mesa_glsl_error(loc, state, "out layout qualifiers only valid in "
-                       "tessellation control or geometry shaders");
+                       "geometry, tessellation and vertex shaders");
    }
 
    /* Allow future assigments of global out's */
index 76ae0f8816763c64c1d98073686ae7424784a7a5..b88b62205137e22bfc8b2c65329769508f6fe401 100644 (file)
@@ -1595,13 +1595,12 @@ set_shader_inout_layout(struct gl_shader *shader,
                     struct _mesa_glsl_parse_state *state)
 {
    /* Should have been prevented by the parser. */
-   if (shader->Stage == MESA_SHADER_TESS_CTRL) {
+   if (shader->Stage == MESA_SHADER_TESS_CTRL ||
+       shader->Stage == MESA_SHADER_VERTEX) {
       assert(!state->in_qualifier->flags.i);
-   } else if (shader->Stage == MESA_SHADER_TESS_EVAL) {
-      assert(!state->out_qualifier->flags.i);
-   } else if (shader->Stage != MESA_SHADER_GEOMETRY) {
+   } else if (shader->Stage != MESA_SHADER_GEOMETRY &&
+              shader->Stage != MESA_SHADER_TESS_EVAL) {
       assert(!state->in_qualifier->flags.i);
-      assert(!state->out_qualifier->flags.i);
    }
 
    if (shader->Stage != MESA_SHADER_COMPUTE) {