texture_builtins.py: Generate texture*Offset functions.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 9 Jan 2011 07:53:11 +0000 (23:53 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 31 Jan 2011 19:10:59 +0000 (11:10 -0800)
src/glsl/builtins/tools/texture_builtins.py

index 5565acf13e1416f368c1990e0fb372b83c430ad0..772ee462d2e9ddb83524804204dbcd993defc309 100755 (executable)
@@ -53,9 +53,7 @@ def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0):
     print "     (parameters"
     print "       (declare (in) " + g + "sampler" + sampler_type + " sampler)"
     print "       (declare (in) " + vec_type("i" if tex_inst == "txf" else "", coord_dim + extra_dim) + " P)",
-    if tex_inst == "txb":
-        print "\n       (declare (in) float bias)",
-    elif tex_inst == "txl":
+    if tex_inst == "txl":
         print "\n       (declare (in) float lod)",
     elif tex_inst == "txf":
         print "\n       (declare (in) int lod)",
@@ -64,6 +62,11 @@ def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0):
         print "\n       (declare (in) " + grad_type + " dPdx)",
         print "\n       (declare (in) " + grad_type + " dPdy)",
 
+    if variant & Offset:
+        print "\n       (declare (const_in) " + vec_type("i", offset_dim) + " offset)",
+    if tex_inst == "txb":
+        print "\n       (declare (in) float bias)",
+
     print ")\n     ((return (" + tex_inst + " (var_ref sampler)",
 
     # Coordinate
@@ -72,8 +75,10 @@ def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0):
     else:
         print "(var_ref P)",
 
-    # Offset
-    print "0",
+    if variant & Offset:
+        print "(var_ref offset)",
+    else:
+        print "0",
 
     if tex_inst != "txf":
         # Projective divisor
@@ -158,6 +163,28 @@ def generate_texture_functions(fs):
     generate_fiu_sigs("txl", "2DArray")
     end_function(fs, "textureLod")
 
+    start_function("textureLodOffset")
+    generate_fiu_sigs("txl", "1D", Offset)
+    generate_fiu_sigs("txl", "2D", Offset)
+    generate_fiu_sigs("txl", "3D", Offset)
+    generate_fiu_sigs("txl", "1DArray", Offset)
+    generate_fiu_sigs("txl", "2DArray", Offset)
+    end_function(fs, "textureLodOffset")
+
+    start_function("textureOffset")
+    generate_fiu_sigs("tex", "1D", Offset)
+    generate_fiu_sigs("tex", "2D", Offset)
+    generate_fiu_sigs("tex", "3D", Offset)
+    generate_fiu_sigs("tex", "1DArray", Offset)
+    generate_fiu_sigs("tex", "2DArray", Offset)
+
+    generate_fiu_sigs("txb", "1D", Offset)
+    generate_fiu_sigs("txb", "2D", Offset)
+    generate_fiu_sigs("txb", "3D", Offset)
+    generate_fiu_sigs("txb", "1DArray", Offset)
+    generate_fiu_sigs("txb", "2DArray", Offset)
+    end_function(fs, "textureOffset")
+
     start_function("texelFetch")
     generate_fiu_sigs("txf", "1D")
     generate_fiu_sigs("txf", "2D")
@@ -166,6 +193,28 @@ def generate_texture_functions(fs):
     generate_fiu_sigs("txf", "2DArray")
     end_function(fs, "texelFetch")
 
+    start_function("texelFetchOffset")
+    generate_fiu_sigs("txf", "1D", Offset)
+    generate_fiu_sigs("txf", "2D", Offset)
+    generate_fiu_sigs("txf", "3D", Offset)
+    generate_fiu_sigs("txf", "1DArray", Offset)
+    generate_fiu_sigs("txf", "2DArray", Offset)
+    end_function(fs, "texelFetchOffset")
+
+    start_function("textureProjOffset")
+    generate_fiu_sigs("tex", "1D", Proj | Offset)
+    generate_fiu_sigs("tex", "1D", Proj | Offset, 2)
+    generate_fiu_sigs("tex", "2D", Proj | Offset)
+    generate_fiu_sigs("tex", "2D", Proj | Offset, 1)
+    generate_fiu_sigs("tex", "3D", Proj | Offset)
+
+    generate_fiu_sigs("txb", "1D", Proj | Offset)
+    generate_fiu_sigs("txb", "1D", Proj | Offset, 2)
+    generate_fiu_sigs("txb", "2D", Proj | Offset)
+    generate_fiu_sigs("txb", "2D", Proj | Offset, 1)
+    generate_fiu_sigs("txb", "3D", Proj | Offset)
+    end_function(fs, "textureProjOffset")
+
     start_function("textureProjLod")
     generate_fiu_sigs("txl", "1D", Proj)
     generate_fiu_sigs("txl", "1D", Proj, 2)
@@ -174,6 +223,14 @@ def generate_texture_functions(fs):
     generate_fiu_sigs("txl", "3D", Proj)
     end_function(fs, "textureProjLod")
 
+    start_function("textureProjLodOffset")
+    generate_fiu_sigs("txl", "1D", Proj | Offset)
+    generate_fiu_sigs("txl", "1D", Proj | Offset, 2)
+    generate_fiu_sigs("txl", "2D", Proj | Offset)
+    generate_fiu_sigs("txl", "2D", Proj | Offset, 1)
+    generate_fiu_sigs("txl", "3D", Proj | Offset)
+    end_function(fs, "textureProjLodOffset")
+
     start_function("textureGrad")
     generate_fiu_sigs("txd", "1D")
     generate_fiu_sigs("txd", "2D")
@@ -183,6 +240,15 @@ def generate_texture_functions(fs):
     generate_fiu_sigs("txd", "2DArray")
     end_function(fs, "textureGrad")
 
+    start_function("textureGradOffset")
+    generate_fiu_sigs("txd", "1D", Offset)
+    generate_fiu_sigs("txd", "2D", Offset)
+    generate_fiu_sigs("txd", "3D", Offset)
+    generate_fiu_sigs("txd", "Cube", Offset)
+    generate_fiu_sigs("txd", "1DArray", Offset)
+    generate_fiu_sigs("txd", "2DArray", Offset)
+    end_function(fs, "textureGradOffset")
+
     start_function("textureProjGrad")
     generate_fiu_sigs("txd", "1D", Proj)
     generate_fiu_sigs("txd", "1D", Proj, 2)
@@ -191,6 +257,15 @@ def generate_texture_functions(fs):
     generate_fiu_sigs("txd", "3D", Proj)
     end_function(fs, "textureProjGrad")
 
+    start_function("textureProjGradOffset")
+    generate_fiu_sigs("txd", "1D", Proj | Offset)
+    generate_fiu_sigs("txd", "1D", Proj | Offset, 2)
+    generate_fiu_sigs("txd", "2D", Proj | Offset)
+    generate_fiu_sigs("txd", "2D", Proj | Offset, 1)
+    generate_fiu_sigs("txd", "3D", Proj | Offset)
+    end_function(fs, "textureProjGradOffset")
+
+
     # ARB_texture_rectangle extension
     start_function("texture2DRect")
     generate_sigs("", "tex", "2DRect")