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

Brian Paul brianp at vmware.com
Fri Mar 27 11:44:35 PDT 2015


The Geeks3d GpuTest GiMark test for Windows has several shaders with 
#version 330 that don't actually use any 3.30 features.  Other shaders 
in the test use #version 130.  Furthermore, when a context is created, 
only a 3.0 context is requested.  We don't support GL 3.0 w/ 3.30 
shaders but if I override the #version 330 with 130 then everything 
works fine.

-Brian

On 03/27/2015 12:13 PM, Ilia Mirkin wrote:
> 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
>> https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIBaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=ldpjgViUPOu17CxrbA3nCCexS68kJbTju51AqpuolTA&s=95-rcxtOJ28IZZjXd3g1FPtmCrob8AIQ5HG_21mXNZc&e=



More information about the mesa-dev mailing list