[Mesa-dev] [PATCH 2/3] glsl: Add compiler support for ARB_shader_texture_lod.
Ian Romanick
idr at freedesktop.org
Mon Apr 25 15:05:05 PDT 2011
-----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?
> +
> + state->ARB_shader_texture_lod_enable = (ext_mode != extension_disable);
> + state->ARB_shader_texture_lod_warn = (ext_mode == extension_warn);
> +
> + unsupported = !state->extensions->ARB_shader_texture_lod;
> } else if (strcmp(name, "GL_ARB_shader_stencil_export") == 0) {
> state->ARB_shader_stencil_export_enable = (ext_mode != extension_disable);
> state->ARB_shader_stencil_export_warn = (ext_mode == extension_warn);
> diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
> index 6df0e16..9abc90f 100644
> --- a/src/glsl/glsl_parser_extras.h
> +++ b/src/glsl/glsl_parser_extras.h
> @@ -168,6 +168,8 @@ struct _mesa_glsl_parse_state {
> unsigned ARB_texture_rectangle_warn:1;
> unsigned EXT_texture_array_enable:1;
> unsigned EXT_texture_array_warn:1;
> + unsigned ARB_shader_texture_lod_enable:1;
> + unsigned ARB_shader_texture_lod_warn:1;
> unsigned ARB_shader_stencil_export_enable:1;
> unsigned ARB_shader_stencil_export_warn:1;
> unsigned AMD_conservative_depth_enable:1;
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iEYEARECAAYFAk218BEACgkQX1gOwKyEAw/3AwCcD3XHuBQrJ9Q2h+NWJ95SBKOz
uVcAni0iH2gbyflodpFzNG1TRQFjUHMZ
=RbJv
-----END PGP SIGNATURE-----
More information about the mesa-dev
mailing list