diff options
author | marha <marha@users.sourceforge.net> | 2011-01-27 11:19:53 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-01-27 11:19:53 +0000 |
commit | 7bbe9d92dfcc704e5017809c7e922025ff33bd53 (patch) | |
tree | a10f27e2f1f92671623d5e2d5b5391665e33c2fc /mesalib/src/glsl/linker.cpp | |
parent | 458542c76bf19b6bb24c397c3a567b64c88842c2 (diff) | |
parent | dc9d750132f95783d2db6fb8e08271fc0878576d (diff) | |
download | vcxsrv-7bbe9d92dfcc704e5017809c7e922025ff33bd53.tar.gz vcxsrv-7bbe9d92dfcc704e5017809c7e922025ff33bd53.tar.bz2 vcxsrv-7bbe9d92dfcc704e5017809c7e922025ff33bd53.zip |
svn merge ^/branches/released .
Diffstat (limited to 'mesalib/src/glsl/linker.cpp')
-rw-r--r-- | mesalib/src/glsl/linker.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp index bf7a56353..4332338df 100644 --- a/mesalib/src/glsl/linker.cpp +++ b/mesalib/src/glsl/linker.cpp @@ -382,6 +382,32 @@ cross_validate_globals(struct gl_shader_program *prog, existing->explicit_location = true; } + /* Validate layout qualifiers for gl_FragDepth. + * + * From the AMD_conservative_depth spec: + * "If gl_FragDepth is redeclared in any fragment shader in + * a program, it must be redeclared in all fragment shaders in that + * program that have static assignments to gl_FragDepth. All + * redeclarations of gl_FragDepth in all fragment shaders in + * a single program must have the same set of qualifiers." + */ + if (strcmp(var->name, "gl_FragDepth") == 0) { + bool layout_declared = var->depth_layout != ir_depth_layout_none; + bool layout_differs = var->depth_layout != existing->depth_layout; + if (layout_declared && layout_differs) { + linker_error_printf(prog, + "All redeclarations of gl_FragDepth in all fragment shaders " + "in a single program must have the same set of qualifiers."); + } + if (var->used && layout_differs) { + linker_error_printf(prog, + "If gl_FragDepth is redeclared with a layout qualifier in" + "any fragment shader, it must be redeclared with the same" + "layout qualifier in all fragment shaders that have" + "assignments to gl_FragDepth"); + } + } + /* FINISHME: Handle non-constant initializers. */ if (var->constant_value != NULL) { |