[Mesa-dev] [PATCH 2/3] glsl: Add compiler support for ARB_shader_texture_lod.

Kenneth Graunke kenneth at whitecape.org
Mon Apr 25 22:34:27 PDT 2011


On 04/25/2011 03:05 PM, Ian Romanick wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 04/22/2011 12:02 PM, Kenneth Graunke wrote:
>> Signed-off-by: Kenneth Graunke<kenneth at whitecape.org>
>> ---
>>   .../builtins/profiles/ARB_shader_texture_lod.frag  |   64 ++++++++++++++++++++
>>   .../builtins/profiles/ARB_shader_texture_lod.vert  |   46 ++++++++++++++
>>   src/glsl/builtins/tools/texture_builtins.py        |   64 ++++++++++++++++++++
>>   src/glsl/glcpp/glcpp-parse.y                       |    4 +
>>   src/glsl/glsl_parser_extras.cpp                    |    8 +++
>>   src/glsl/glsl_parser_extras.h                      |    2 +
>>   6 files changed, 188 insertions(+), 0 deletions(-)
>>   create mode 100644 src/glsl/builtins/profiles/ARB_shader_texture_lod.frag
>>   create mode 100644 src/glsl/builtins/profiles/ARB_shader_texture_lod.vert
>>
>> diff --git a/src/glsl/builtins/profiles/ARB_shader_texture_lod.frag b/src/glsl/builtins/profiles/ARB_shader_texture_lod.frag
>> new file mode 100644
>> index 0000000..fefd707
>> --- /dev/null
>> +++ b/src/glsl/builtins/profiles/ARB_shader_texture_lod.frag
>> @@ -0,0 +1,64 @@
>> +/*
>> + * The existing isotropic vertex texture functions are added to the
>> + * built-in functions for fragment shaders.
>> + */
>> +vec4 texture1DLod    (sampler1D sampler, float coord, float lod);
>> +vec4 texture1DProjLod(sampler1D sampler, vec2  coord, float lod);
>> +vec4 texture1DProjLod(sampler1D sampler, vec4  coord, float lod);
>> +vec4 texture2DLod    (sampler2D sampler, vec2 coord, float lod);
>> +vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);
>> +vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);
>> +vec4 texture3DLod    (sampler3D sampler, vec3 coord, float lod);
>> +vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod);
>> +vec4 textureCubeLod  (sampler3D sampler, vec3 coord, float lod);
>> +vec4 shadow1DLod    (sampler1DShadow sampler, vec3 coord, float lod);
>> +vec4 shadow2DLod    (sampler2DShadow sampler, vec3 coord, float lod);
>> +vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod);
>> +vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod);
>> +
>> +/* New anisotropic texture functions, providing explicit derivatives: */
>> +vec4 texture1DGradARB        (sampler1D sampler,
>> +                              float P, float dPdx, float dPdy);
>> +vec4 texture1DProjGradARB    (sampler1D sampler,
>> +                              vec2  P, float dPdx, float dPdy);
>> +vec4 texture1DProjGradARB    (sampler1D sampler,
>> +                              vec4  P, float dPdx, float dPdy);
>> +
>> +vec4 texture2DGradARB        (sampler2D sampler,
>> +                              vec2  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DProjGradARB    (sampler2D sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DProjGradARB    (sampler2D sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +
>> +vec4 texture3DGradARB        (sampler3D sampler,
>> +                              vec3  P, vec3  dPdx, vec3  dPdy);
>> +vec4 texture3DProjGradARB    (sampler3D sampler,
>> +                              vec4  P, vec3  dPdx, vec3  dPdy);
>> +
>> +vec4 textureCubeGradARB      (samplerCube sampler,
>> +                              vec3  P, vec3  dPdx, vec3  dPdy);
>> +
>> +vec4 shadow1DGradARB         (sampler1DShadow sampler,
>> +                              vec3  P, float dPdx, float dPdy);
>> +vec4 shadow1DProjGradARB     (sampler1DShadow sampler,
>> +                              vec4  P, float dPdx, float dPdy);
>> +
>> +vec4 shadow2DGradARB         (sampler2DShadow sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 shadow2DProjGradARB     (sampler2DShadow sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +
>> +#ifdef GL_ARB_texture_rectangle
>> +vec4 texture2DRectGradARB    (sampler2DRect sampler,
>> +                              vec2  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DRectProjGradARB(sampler2DRect sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DRectProjGradARB(sampler2DRect sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +
>> +vec4 shadow2DRectGradARB     (sampler2DRectShadow sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 shadow2DRectProjGradARB (sampler2DRectShadow sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +#endif
>> diff --git a/src/glsl/builtins/profiles/ARB_shader_texture_lod.vert b/src/glsl/builtins/profiles/ARB_shader_texture_lod.vert
>> new file mode 100644
>> index 0000000..edfed26
>> --- /dev/null
>> +++ b/src/glsl/builtins/profiles/ARB_shader_texture_lod.vert
>> @@ -0,0 +1,46 @@
>> +/* New anisotropic texture functions, providing explicit derivatives: */
>> +vec4 texture1DGradARB        (sampler1D sampler,
>> +                              float P, float dPdx, float dPdy);
>> +vec4 texture1DProjGradARB    (sampler1D sampler,
>> +                              vec2  P, float dPdx, float dPdy);
>> +vec4 texture1DProjGradARB    (sampler1D sampler,
>> +                              vec4  P, float dPdx, float dPdy);
>> +
>> +vec4 texture2DGradARB        (sampler2D sampler,
>> +                              vec2  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DProjGradARB    (sampler2D sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DProjGradARB    (sampler2D sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +
>> +vec4 texture3DGradARB        (sampler3D sampler,
>> +                              vec3  P, vec3  dPdx, vec3  dPdy);
>> +vec4 texture3DProjGradARB    (sampler3D sampler,
>> +                              vec4  P, vec3  dPdx, vec3  dPdy);
>> +
>> +vec4 textureCubeGradARB      (samplerCube sampler,
>> +                              vec3  P, vec3  dPdx, vec3  dPdy);
>> +
>> +vec4 shadow1DGradARB         (sampler1DShadow sampler,
>> +                              vec3  P, float dPdx, float dPdy);
>> +vec4 shadow1DProjGradARB     (sampler1DShadow sampler,
>> +                              vec4  P, float dPdx, float dPdy);
>> +
>> +vec4 shadow2DGradARB         (sampler2DShadow sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 shadow2DProjGradARB     (sampler2DShadow sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +
>> +#ifdef GL_ARB_texture_rectangle
>> +vec4 texture2DRectGradARB    (sampler2DRect sampler,
>> +                              vec2  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DRectProjGradARB(sampler2DRect sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 texture2DRectProjGradARB(sampler2DRect sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +
>> +vec4 shadow2DRectGradARB     (sampler2DRectShadow sampler,
>> +                              vec3  P, vec2  dPdx, vec2  dPdy);
>> +vec4 shadow2DRectProjGradARB (sampler2DRectShadow sampler,
>> +                              vec4  P, vec2  dPdx, vec2  dPdy);
>> +#endif
>> diff --git a/src/glsl/builtins/tools/texture_builtins.py b/src/glsl/builtins/tools/texture_builtins.py
>> index 2fbe790..a4054ca 100755
>> --- a/src/glsl/builtins/tools/texture_builtins.py
>> +++ b/src/glsl/builtins/tools/texture_builtins.py
>> @@ -369,6 +369,70 @@ def generate_texture_functions(fs):
>>       generate_sigs("", "tex", "2DArrayShadow")
>>       end_function(fs, "shadow2DArray")
>>
>> +    # ARB_shader_texture_lod extension
>> +    start_function("texture1DGradARB")
>> +    generate_fiu_sigs("txd", "1D")
>> +    end_function(fs, "texture1DGradARB")
>> +
>> +    start_function("texture2DGradARB")
>> +    generate_fiu_sigs("txd", "2D")
>> +    end_function(fs, "texture2DGradARB")
>> +
>> +    start_function("texture3DGradARB")
>> +    generate_fiu_sigs("txd", "3D")
>> +    end_function(fs, "texture3DGradARB")
>> +
>> +    start_function("textureCubeGradARB")
>> +    generate_fiu_sigs("txd", "Cube")
>> +    end_function(fs, "textureCubeGradARB")
>> +
>> +    start_function("texture1DProjGradARB")
>> +    generate_fiu_sigs("txd", "1D", True)
>> +    generate_fiu_sigs("txd", "1D", True, 2)
>> +    end_function(fs, "texture1DProjGradARB")
>> +
>> +    start_function("texture2DProjGradARB")
>> +    generate_fiu_sigs("txd", "2D", True)
>> +    generate_fiu_sigs("txd", "2D", True, 1)
>> +    end_function(fs, "texture2DProjGradARB")
>> +
>> +    start_function("texture3DProjGradARB")
>> +    generate_fiu_sigs("txd", "3D", True)
>> +    end_function(fs, "texture3DProjGradARB")
>> +
>> +    start_function("shadow1DGradARB")
>> +    generate_sigs("", "txd", "1DShadow", False, 1)
>> +    end_function(fs, "shadow1DGradARB")
>> +
>> +    start_function("shadow1DProjGradARB")
>> +    generate_sigs("", "txd", "1DShadow", True, 1)
>> +    end_function(fs, "shadow1DProjGradARB")
>> +
>> +    start_function("shadow2DGradARB")
>> +    generate_sigs("", "txd", "2DShadow", False)
>> +    end_function(fs, "shadow2DGradARB")
>> +
>> +    start_function("shadow2DProjGradARB")
>> +    generate_sigs("", "txd", "2DShadow", True)
>> +    end_function(fs, "shadow2DProjGradARB")
>> +
>> +    start_function("texture2DRectGradARB")
>> +    generate_sigs("", "txd", "2DRect")
>> +    end_function(fs, "texture2DRectGradARB")
>> +
>> +    start_function("texture2DRectProjGradARB")
>> +    generate_sigs("", "txd", "2DRect", True)
>> +    generate_sigs("", "txd", "2DRect", True, 1)
>> +    end_function(fs, "texture2DRectProjGradARB")
>> +
>> +    start_function("shadow2DRectGradARB")
>> +    generate_sigs("", "txd", "2DRectShadow", False)
>> +    end_function(fs, "shadow2DRectGradARB")
>> +
>> +    start_function("shadow2DRectProjGradARB")
>> +    generate_sigs("", "txd", "2DRectShadow", True)
>> +    end_function(fs, "shadow2DRectProjGradARB")
>> +
>>       # Deprecated (110/120 style) functions with silly names:
>>       start_function("texture1D")
>>       generate_sigs("", "tex", "1D")
>> diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
>> index 6f15e85..0a35e88 100644
>> --- a/src/glsl/glcpp/glcpp-parse.y
>> +++ b/src/glsl/glcpp/glcpp-parse.y
>> @@ -1128,6 +1128,10 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api)
>>
>>   	   if (extensions->ARB_explicit_attrib_location)
>>   	      add_builtin_define(parser, "GL_ARB_explicit_attrib_location", 1);
>> +
>> +	   if (extensions->ARB_shader_texture_lod)
>> +	      add_builtin_define(parser, "GL_ARB_shader_texture_lod", 1);
>> +
>>   	   if (extensions->AMD_conservative_depth)
>>   	      add_builtin_define(parser, "GL_AMD_conservative_depth", 1);
>>   	}
>> diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
>> index 5bb3a6f..e95e595 100644
>> --- a/src/glsl/glsl_parser_extras.cpp
>> +++ b/src/glsl/glsl_parser_extras.cpp
>> @@ -240,6 +240,14 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
>>         state->EXT_texture_array_warn = (ext_mode == extension_warn);
>>
>>         unsupported = !state->extensions->EXT_texture_array;
>> +   } else if (strcmp(name, "GL_ARB_shader_texture_lod") == 0) {
>> +      /* Force ARB_texture_rectangle to be on so sampler2DRects are defined */
>> +      state->ARB_texture_rectangle_enable = true;
>
> Isn't this always enabled anyway?

True enough; we always enable it for desktop GL, so there's no need for 
this code.  (It's disabled on ES2, but that's irrelevant for this 
extension.)

Should I leave a comment stating that ARB_texture_rectangle is required 
but always enabled, or just take it out?

--Kenneth


More information about the mesa-dev mailing list