Extend the following functions to support the type qualifiers added by the extension: - apply_type_qualifier_to_variable() - ast_declarator_list::hir() --- src/glsl/ast_to_hir.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 15e1afc..6e80e96 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -1813,6 +1813,31 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, } } + // Layout qualifiers enabled by AMD_conservative_depth. + var->depth_any = qual->flags.q.depth_any; + var->depth_greater = qual->flags.q.depth_greater; + var->depth_less = qual->flags.q.depth_less; + var->depth_unchanged = qual->flags.q.depth_unchanged; + { + int count = var->depth_any + + var->depth_greater + + var->depth_less + + var->depth_unchanged; + if (count > 0 && !state->AMD_conservative_depth_enable) { + _mesa_glsl_error(loc, state, + "Extension GL_AMD_conservative_depth must be enabled to " + "use depth layout qualifiers"); + } else if (count > 0 && strcmp(var->name, "gl_FragDepth") != 0) { + _mesa_glsl_error(loc, state, + "depth layout qualifiers can be applied only to " + "gl_FragDepth"); + } else if (count > 1 && strcmp(var->name, "gl_FragDepth") == 0) { + _mesa_glsl_error(loc, state, + "At most one depth layout qualifier can be applied to " + "gl_FragDepth"); + } + } + if (var->type->is_array() && state->language_version != 110) { var->array_lvalue = true; } @@ -2219,6 +2244,16 @@ ast_declarator_list::hir(exec_list *instructions, */ earlier->origin_upper_left = var->origin_upper_left; earlier->pixel_center_integer = var->pixel_center_integer; + } else if (state->AMD_conservative_depth_enable + && strcmp(var->name, "gl_FragDepth") == 0 + && earlier->type == var->type + && earlier->mode == var->mode) { + /* Allow redeclaration of gl_FragDepth for AMD_conservative_depth + * qualifiers. */ + earlier->depth_any = var->depth_any; + earlier->depth_greater = var->depth_greater; + earlier->depth_less = var->depth_less; + earlier->depth_unchanged = var->depth_unchanged; } else { YYLTYPE loc = this->get_location(); _mesa_glsl_error(&loc, state, "`%s' redeclared", decl->identifier); -- 1.7.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev