glsl: Add GLSL 1.40 textureSize() implementations for sampler2DRect.
authorEric Anholt <eric@anholt.net>
Mon, 12 Mar 2012 21:07:39 +0000 (14:07 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 15 Mar 2012 23:24:50 +0000 (16:24 -0700)
By setting lod to 0 in the builtin function implementation, we avoid
needing to update all the visitors to ignore LOD in this case, when
the hardware drivers actually want to ask for LOD 0 for rectangular
textures.

Fixes piglit spec/GLSL-1.40/textureSize-*Rect.

v2: Change style of looking for substrings.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/builtins/profiles/140.frag
src/glsl/builtins/profiles/140.vert
src/glsl/builtins/tools/texture_builtins.py

index 1bf6c7592d5be4831564f92263302b5610d9a60c..da284735cce8763c864a924558dd32cde8b140e4 100644 (file)
@@ -499,6 +499,11 @@ ivec3 textureSize(usampler2DArray sampler, int lod);
 ivec2 textureSize(sampler1DArrayShadow sampler, int lod);
 ivec3 textureSize(sampler2DArrayShadow sampler, int lod);
 
+ivec2 textureSize(sampler2DRect sampler);
+ivec2 textureSize(isampler2DRect sampler);
+ivec2 textureSize(usampler2DRect sampler);
+ivec2 textureSize(sampler2DRectShadow sampler);
+
 /* texture - no bias */
  vec4 texture( sampler1D sampler, float P);
 ivec4 texture(isampler1D sampler, float P);
index 0fad767bdbde059b7efc6a7249add6a22bc28cc7..bfef4ed1a419a53ece41db01fb4bc2c0f5c16621 100644 (file)
@@ -499,6 +499,11 @@ ivec3 textureSize(usampler2DArray sampler, int lod);
 ivec2 textureSize(sampler1DArrayShadow sampler, int lod);
 ivec3 textureSize(sampler2DArrayShadow sampler, int lod);
 
+ivec2 textureSize(sampler2DRect sampler);
+ivec2 textureSize(isampler2DRect sampler);
+ivec2 textureSize(usampler2DRect sampler);
+ivec2 textureSize(sampler2DRectShadow sampler);
+
 /* texture */
  vec4 texture( sampler1D sampler, float P);
 ivec4 texture(isampler1D sampler, float P);
index 07d0a1b8d76a02f7bc4b180ad1fd829e9a3a2c22..cd15dc4b31ce7df8abedaa9b8e5a8070f10cc285 100755 (executable)
@@ -71,7 +71,7 @@ def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0):
         print "\n       (declare (in) " + vec_type("i" if tex_inst == "txf" else "", coord_dim + extra_dim) + " P)",
     if tex_inst == "txl":
         print "\n       (declare (in) float lod)",
-    elif tex_inst == "txf" or tex_inst == "txs":
+    elif tex_inst == "txf" or (tex_inst == "txs" and "Rect" not in sampler_type):
         print "\n       (declare (in) int lod)",
     elif tex_inst == "txd":
         grad_type = vec_type("", coord_dim)
@@ -115,7 +115,12 @@ def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0):
     # Bias/explicit LOD/gradient:
     if tex_inst == "txb":
         print "(var_ref bias)",
-    elif tex_inst == "txl" or tex_inst == "txf" or tex_inst == "txs":
+    elif tex_inst == "txs":
+        if "Rect" not in sampler_type:
+            print "(var_ref lod)",
+        else:
+            print "(constant int (0))"
+    elif tex_inst == "txl" or tex_inst == "txf":
         print "(var_ref lod)",
     elif tex_inst == "txd":
         print "((var_ref dPdx) (var_ref dPdy))",
@@ -153,6 +158,8 @@ def generate_texture_functions(fs):
     generate_sigs("", "txs", "CubeShadow")
     generate_sigs("", "txs", "1DArrayShadow")
     generate_sigs("", "txs", "2DArrayShadow")
+    generate_fiu_sigs("txs", "2DRect")
+    generate_sigs("", "txs", "2DRectShadow")
     end_function(fs, "textureSize")
 
     start_function("texture")