[Mesa-dev] [PATCH] glsl/linker: Allow mixing of desktop GLSL versions.

Kenneth Graunke kenneth at whitecape.org
Fri Oct 18 06:58:25 CEST 2013


On 10/17/2013 08:07 PM, Paul Berry wrote:
> Previously, Mesa followed the linkage rules outlined in the GLSL
> 1.20-1.40 specs, which (collectively) said that GLSL versions 1.10 and
> 1.20 could be linked together, but no other versions could be linked.
> 
> In GLSL 4.30, the linkage rules were relaxed so that any two desktop
> GLSL versions can be linked together.  This change was made because it
> reflected the behaviour of nearly all existing implementations (see
> Khronos bug 8463).  Mesa was one of the few (perhaps the only)
> exceptions to prohibit cross-linking of some GLSL versions.
> 
> Since the GLSL linkage rules were deliberately relaxed in order to
> match the behaviour of existing implementations, it seems appropriate
> to relax the rules in Mesa too (even though Mesa doesn't support GLSL
> 4.30 yet).
> 
> Note that linking ES and desktop shaders is still prohibited, as is
> linking ES shaders having different GLSL versions.
> 
> Fixes piglit tests "shaders/version-mixing {interstage,intrastage}".
> ---
>  src/glsl/linker.cpp | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index 9095a40..0a949b4 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -2057,14 +2057,10 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
>        }
>     }
>  
> -   /* Previous to GLSL version 1.30, different compilation units could mix and
> -    * match shading language versions.  With GLSL 1.30 and later, the versions
> -    * of all shaders must match.
> -    *
> -    * GLSL ES has never allowed mixing of shading language versions.
> +   /* In desktop GLSL, different shader versions may be linked together.  In
> +    * GLSL ES, all shader versions must be the same.
>      */
> -   if ((is_es_prog || max_version >= 130)
> -       && min_version != max_version) {
> +   if (is_es_prog && min_version != max_version) {
>        linker_error(prog, "all shaders must use same shading "
>  		   "language version\n");
>        goto done;
> 

Looks good to me.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>


More information about the mesa-dev mailing list