glsl: Add texelFetch(*samplerBuffer) entrypoints to GLSL 1.40.
authorEric Anholt <eric@anholt.net>
Mon, 26 Mar 2012 21:04:48 +0000 (14:04 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 9 Apr 2012 21:34:27 +0000 (14:34 -0700)
Fix texelFetch(sampler2DRect) and textureSize(samplerBuffer)
generation to not reference a LOD at the same time because it's easier
than not fixing it.

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 da284735cce8763c864a924558dd32cde8b140e4..b534827c9943a56213c59eb6337b418d9d847d1f 100644 (file)
@@ -714,6 +714,10 @@ uvec4 texelFetch(usampler1DArray sampler, ivec2 P, int lod);
 ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod);
 uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod);
 
+ vec4 texelFetch( samplerBuffer sampler, int P);
+ivec4 texelFetch(isamplerBuffer sampler, int P);
+uvec4 texelFetch(usamplerBuffer sampler, int P);
+
 /* texelFetchOffset */
  vec4 texelFetchOffset( sampler1D sampler, int P, int lod, int offset);
 ivec4 texelFetchOffset(isampler1D sampler, int P, int lod, int offset);
index bfef4ed1a419a53ece41db01fb4bc2c0f5c16621..7aa92402c381daa69c84f713713c94ed69a867a4 100644 (file)
@@ -635,6 +635,10 @@ uvec4 texelFetch(usampler1DArray sampler, ivec2 P, int lod);
 ivec4 texelFetch(isampler2DArray sampler, ivec3 P, int lod);
 uvec4 texelFetch(usampler2DArray sampler, ivec3 P, int lod);
 
+ vec4 texelFetch( samplerBuffer sampler, int P);
+ivec4 texelFetch(isamplerBuffer sampler, int P);
+uvec4 texelFetch(usamplerBuffer sampler, int P);
+
 /* texelFetchOffset */
  vec4 texelFetchOffset( sampler1D sampler, int P, int lod, int offset);
 ivec4 texelFetchOffset(isampler1D sampler, int P, int lod, int offset);
index cd15dc4b31ce7df8abedaa9b8e5a8070f10cc285..bbbbd0bd0c5ca274f627922fd77a5077eadc9316 100755 (executable)
@@ -25,6 +25,8 @@ def get_sampler_dim(sampler_type):
         sampler_dim = 3
     elif sampler_type == "ExternalOES":
         sampler_dim = 2
+    elif sampler_type == "Buffer":
+        sampler_dim = 1
     else:
         assert False ("coord_dim: invalid sampler_type: " + sampler_type)
     return sampler_dim
@@ -71,7 +73,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" and "Rect" not in sampler_type):
+    elif ((tex_inst == "txf" or tex_inst == "txs") and "Buffer" not in sampler_type and "Rect" not in sampler_type):
         print "\n       (declare (in) int lod)",
     elif tex_inst == "txd":
         grad_type = vec_type("", coord_dim)
@@ -115,12 +117,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 == "txs":
-        if "Rect" not in sampler_type:
+    elif tex_inst == "txs" or tex_inst == "txf":
+        if "Rect" not in sampler_type and "Buffer" not in sampler_type:
             print "(var_ref lod)",
         else:
             print "(constant int (0))"
-    elif tex_inst == "txl" or tex_inst == "txf":
+    elif tex_inst == "txl":
         print "(var_ref lod)",
     elif tex_inst == "txd":
         print "((var_ref dPdx) (var_ref dPdy))",
@@ -255,6 +257,7 @@ def generate_texture_functions(fs):
     generate_fiu_sigs("txf", "3D")
     generate_fiu_sigs("txf", "1DArray")
     generate_fiu_sigs("txf", "2DArray")
+    generate_fiu_sigs("txf", "Buffer")
     end_function(fs, "texelFetch")
 
     start_function("texelFetchOffset")