[Mesa-dev] [PATCH] glsl: allow ForceGLSLVersion to override #version directives

Ilia Mirkin imirkin at alum.mit.edu
Fri Mar 27 11:13:44 PDT 2015


What's the use-case for applying a different version to a shader with
an explicit #version?

On Fri, Mar 27, 2015 at 2:13 PM, Brian Paul <brianp at vmware.com> wrote:
> Previously, the ctx->Const.ForceGLSLVersion setting only worked if
> the shader lacked a #version directive.  Now, the ForceGLSLVersion
> setting will override the #version directive too.
>
> This change should be safe since it should be rare to have an app
> that has a mix of shader versions and we only wanted to override
> the #version for shaders which lacked the #version directive.
> ---
>  src/glsl/glsl_parser_extras.cpp | 11 +++++++----
>  src/glsl/glsl_parser_extras.h   |  1 +
>  src/mesa/main/mtypes.h          |  4 ++--
>  3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
> index 79624bc..0aa3c54 100644
> --- a/src/glsl/glsl_parser_extras.cpp
> +++ b/src/glsl/glsl_parser_extras.cpp
> @@ -73,8 +73,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
>     this->uses_builtin_functions = false;
>
>     /* Set default language version and extensions */
> -   this->language_version = ctx->Const.ForceGLSLVersion ?
> -                            ctx->Const.ForceGLSLVersion : 110;
> +   this->language_version = 110;
> +   this->forced_language_version = ctx->Const.ForceGLSLVersion;
>     this->es_shader = false;
>     this->ARB_texture_rectangle_enable = true;
>
> @@ -320,11 +320,14 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
>        this->ARB_texture_rectangle_enable = false;
>     }
>
> -   this->language_version = version;
> +   if (this->forced_language_version)
> +      this->language_version = this->forced_language_version;
> +   else
> +      this->language_version = version;
>
>     bool supported = false;
>     for (unsigned i = 0; i < this->num_supported_versions; i++) {
> -      if (this->supported_versions[i].ver == (unsigned) version
> +      if (this->supported_versions[i].ver == this->language_version
>            && this->supported_versions[i].es == this->es_shader) {
>           supported = true;
>           break;
> diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
> index 0975c86..1f5478b 100644
> --- a/src/glsl/glsl_parser_extras.h
> +++ b/src/glsl/glsl_parser_extras.h
> @@ -226,6 +226,7 @@ struct _mesa_glsl_parse_state {
>
>     bool es_shader;
>     unsigned language_version;
> +   unsigned forced_language_version;
>     gl_shader_stage stage;
>
>     /**
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 8e1dba6..f718768 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -3527,8 +3527,8 @@ struct gl_constants
>     GLboolean ForceGLSLExtensionsWarn;
>
>     /**
> -    * If non-zero, forces GLSL shaders without the #version directive to behave
> -    * as if they began with "#version ForceGLSLVersion".
> +    * If non-zero, forces GLSL shaders to behave as if they began
> +    * with "#version ForceGLSLVersion".
>      */
>     GLuint ForceGLSLVersion;
>
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list