glsl: Add compiler support for ARB_shader_texture_lod.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 18 Oct 2010 22:35:10 +0000 (15:35 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 9 May 2011 18:23:54 +0000 (11:23 -0700)
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Tested-by: Marek Olšák <maraeo@gmail.com>
src/glsl/builtins/profiles/ARB_shader_texture_lod.frag [new file with mode: 0644]
src/glsl/builtins/profiles/ARB_shader_texture_lod.vert [new file with mode: 0644]
src/glsl/builtins/tools/texture_builtins.py
src/glsl/glcpp/glcpp-parse.y
src/glsl/glsl_parser_extras.cpp
src/glsl/glsl_parser_extras.h

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 (file)
index 0000000..c15e2a1
--- /dev/null
@@ -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  (samplerCube 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 (file)
index 0000000..edfed26
--- /dev/null
@@ -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
index 2fbe79010f9ffc2a2721d3edddc2d80db1220169..a4054caac98e5663a8716c29f8ff63fabadeb8a4 100755 (executable)
@@ -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")
index 6f15e85a1221279f5a4d4f4f5f9c64c49fba8680..0a35e88cec7134b942a4c08554d0881d256f061e 100644 (file)
@@ -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);
        }
index 18bff88deec12894d80a052f50a94094e0af721f..fce2faa758ba8b1a3d342065479b046a29329aaa 100644 (file)
@@ -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;
+
+      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);
index f9147653f359897b67741dc1ecad073892e1bce2..878d2ae3f4d89e4da85e75eac535864b4feb3e4d 100644 (file)
@@ -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;