Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. #!/usr/bin/python
  2.  
  3. import sys
  4. import StringIO
  5.  
  6. # Bitfield constants for the 'variant' argument to generate_sigs
  7. Proj = 1
  8. Offset = 2
  9. Single = 4
  10.  
  11. def vec_type(g, size):
  12.     if size == 1:
  13.         if g == "i":
  14.             return "int"
  15.         elif g == "u":
  16.             return "uint"
  17.         return "float"
  18.     return g + "vec" + str(size)
  19.  
  20. # Get the sampler dimension - i.e. sampler3D gives 3
  21. def get_sampler_dim(sampler_type):
  22.     if sampler_type[0].isdigit():
  23.         sampler_dim = int(sampler_type[0])
  24.     elif sampler_type.startswith("Cube"):
  25.         sampler_dim = 3
  26.     elif sampler_type == "ExternalOES":
  27.         sampler_dim = 2
  28.     elif sampler_type == "Buffer":
  29.         sampler_dim = 1
  30.     else:
  31.         assert False ("coord_dim: invalid sampler_type: " + sampler_type)
  32.     return sampler_dim
  33.  
  34. # Get the coordinate dimension for a given sampler type.
  35. # Array samplers also get +1 here since the layer is really an extra coordinate
  36. def get_coord_dim(sampler_type, tex_inst):
  37.     coord_dim = get_sampler_dim(sampler_type)
  38.     if sampler_type.find("Array") != -1 and tex_inst != "lod":
  39.         coord_dim += 1
  40.     return coord_dim
  41.  
  42. # Get the number of extra vector components (i.e. shadow comparitor)
  43. def get_extra_dim(sampler_type, use_proj, unused_fields, tex_inst):
  44.     extra_dim = unused_fields
  45.     if sampler_type == "CubeArrayShadow":
  46.         return 0
  47.     if sampler_type.find("Shadow") != -1 and tex_inst != "lod":
  48.         extra_dim += 1
  49.     if use_proj:
  50.         extra_dim += 1
  51.     return extra_dim
  52.  
  53. def get_txs_dim(sampler_type, tex_inst):
  54.     if sampler_type.startswith("CubeArray"):
  55.         return 3
  56.     if sampler_type.startswith("Cube"):
  57.         return 2
  58.     return get_coord_dim(sampler_type, tex_inst)
  59.  
  60. def has_lod(sampler_type):
  61.     if 'Buffer' in sampler_type: return False
  62.     if 'Rect' in sampler_type: return False
  63.     if 'MS' in sampler_type: return False
  64.     return True
  65.  
  66. def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0):
  67.     coord_dim = get_coord_dim(sampler_type, tex_inst)
  68.     extra_dim = get_extra_dim(sampler_type, variant & Proj, unused_fields, tex_inst)
  69.     sampler_dim = get_sampler_dim(sampler_type)
  70.  
  71.     if variant & Single:
  72.         return_type = "float"
  73.     elif tex_inst == "txs":
  74.         return_type = vec_type("i", get_txs_dim(sampler_type, tex_inst))
  75.     elif tex_inst == "lod":
  76.         return_type = "vec2"
  77.     else:
  78.         return_type = g + "vec4"
  79.  
  80.     # Print parameters
  81.     print "   (signature", return_type
  82.     print "     (parameters"
  83.     print "       (declare (in) " + g + "sampler" + sampler_type + " sampler)",
  84.     if tex_inst != "txs":
  85.         print "\n       (declare (in) " + vec_type("i" if tex_inst in ['txf','txf_ms'] else "", coord_dim + extra_dim) + " P)",
  86.     if tex_inst == "txl":
  87.         print "\n       (declare (in) float lod)",
  88.     elif tex_inst in ['txf', 'txs'] and has_lod(sampler_type):
  89.         print "\n       (declare (in) int lod)",
  90.     elif tex_inst == "txf_ms":
  91.         print "\n       (declare (in) int sample)",
  92.     elif tex_inst == "txd":
  93.         grad_type = vec_type("", sampler_dim)
  94.         print "\n       (declare (in) " + grad_type + " dPdx)",
  95.         print "\n       (declare (in) " + grad_type + " dPdy)",
  96.     if sampler_type == "CubeArrayShadow" and tex_inst == "tex":
  97.         print "\n       (declare (in) float compare)",
  98.  
  99.     if variant & Offset:
  100.         print "\n       (declare (const_in) " + vec_type("i", sampler_dim) + " offset)",
  101.     if tex_inst == "txb":
  102.         print "\n       (declare (in) float bias)",
  103.  
  104.     print ")\n     ((return (" + tex_inst, return_type, "(var_ref sampler)",
  105.  
  106.     if tex_inst != "txs":
  107.         # Coordinate
  108.         if extra_dim > 0:
  109.             print "(swiz " + "xyzw"[:coord_dim] + " (var_ref P))",
  110.         else:
  111.             print "(var_ref P)",
  112.  
  113.     if tex_inst not in ['txf_ms', 'txs', 'lod']:
  114.         # Coordinate offset
  115.         if variant & Offset:
  116.             print "(var_ref offset)",
  117.         else:
  118.             print "0",
  119.  
  120.     if tex_inst not in ['txf', 'txf_ms', 'txs', 'lod']:
  121.         # Projective divisor
  122.         if variant & Proj:
  123.             print "(swiz " + "xyzw"[coord_dim + extra_dim-1] + " (var_ref P))",
  124.         else:
  125.             print "1",
  126.  
  127.         # Shadow comparitor
  128.         if sampler_type == "CubeArrayShadow": # a special case
  129.             print "(var_ref compare)",
  130.         elif sampler_type == "2DArrayShadow" or sampler_type == "CubeShadow": # a special case:
  131.             print "(swiz w (var_ref P))",   # ...array layer is z; shadow is w
  132.         elif sampler_type.endswith("Shadow"):
  133.             print "(swiz z (var_ref P))",
  134.         else:
  135.             print "()",
  136.  
  137.     # Bias/explicit LOD/gradient:
  138.     if tex_inst == "txb":
  139.         print "(var_ref bias)",
  140.     elif tex_inst in ['txs', 'txf', 'txf_ms']:
  141.         if has_lod(sampler_type):
  142.             print "(var_ref lod)",
  143.         elif tex_inst == 'txf_ms':
  144.             print "(var_ref sample)",
  145.         else:
  146.             print "(constant int (0))",
  147.     elif tex_inst == "txl":
  148.         print "(var_ref lod)",
  149.     elif tex_inst == "txd":
  150.         print "((var_ref dPdx) (var_ref dPdy))",
  151.     print "))))\n"
  152.  
  153. def generate_fiu_sigs(tex_inst, sampler_type, variant = 0, unused_fields = 0):
  154.     generate_sigs("",  tex_inst, sampler_type, variant, unused_fields)
  155.     generate_sigs("i", tex_inst, sampler_type, variant, unused_fields)
  156.     generate_sigs("u", tex_inst, sampler_type, variant, unused_fields)
  157.  
  158. def start_function(name):
  159.     sys.stdout = StringIO.StringIO()
  160.     print "((function " + name
  161.  
  162. def end_function(fs, name):
  163.     print "))"
  164.     fs[name] = sys.stdout.getvalue();
  165.     sys.stdout.close()
  166.  
  167. # Generate all the functions and store them in the supplied dictionary.
  168. # This is better than writing them to actual files since they should never be
  169. # edited; it'd also be easy to confuse them with the many hand-generated files.
  170. #
  171. # Takes a dictionary as an argument.
  172. def generate_texture_functions(fs):
  173.     start_function("textureSize")
  174.     generate_fiu_sigs("txs", "1D")
  175.     generate_fiu_sigs("txs", "2D")
  176.     generate_fiu_sigs("txs", "3D")
  177.     generate_fiu_sigs("txs", "Cube")
  178.     generate_fiu_sigs("txs", "1DArray")
  179.     generate_fiu_sigs("txs", "2DArray")
  180.     generate_sigs("", "txs", "1DShadow")
  181.     generate_sigs("", "txs", "2DShadow")
  182.     generate_sigs("", "txs", "CubeShadow")
  183.     generate_sigs("", "txs", "1DArrayShadow")
  184.     generate_sigs("", "txs", "2DArrayShadow")
  185.     generate_fiu_sigs("txs", "2DRect")
  186.     generate_sigs("", "txs", "2DRectShadow")
  187.     generate_fiu_sigs("txs", "Buffer")
  188.     generate_fiu_sigs("txs", "CubeArray")
  189.     generate_sigs("", "txs", "CubeArrayShadow")
  190.     generate_fiu_sigs("txs", "2DMS")
  191.     generate_fiu_sigs("txs", "2DMSArray")
  192.     end_function(fs, "textureSize")
  193.  
  194.     start_function("texture")
  195.     generate_fiu_sigs("tex", "1D")
  196.     generate_fiu_sigs("tex", "2D")
  197.     generate_fiu_sigs("tex", "3D")
  198.     generate_fiu_sigs("tex", "Cube")
  199.     generate_fiu_sigs("tex", "1DArray")
  200.     generate_fiu_sigs("tex", "2DArray")
  201.     generate_sigs("", "tex", "1DShadow", Single, 1);
  202.     generate_sigs("", "tex", "2DShadow", Single);
  203.     generate_sigs("", "tex", "CubeShadow", Single);
  204.     generate_sigs("", "tex", "1DArrayShadow", Single);
  205.     generate_sigs("", "tex", "2DArrayShadow", Single);
  206.     generate_fiu_sigs("tex", "2DRect")
  207.     generate_sigs("", "tex", "2DRectShadow", Single);
  208.     # ARB_texture_cube_map_array extension
  209.     generate_fiu_sigs("tex", "CubeArray")
  210.     generate_sigs("", "tex", "CubeArrayShadow", Single);
  211.  
  212.     generate_fiu_sigs("txb", "1D")
  213.     generate_fiu_sigs("txb", "2D")
  214.     generate_fiu_sigs("txb", "3D")
  215.     generate_fiu_sigs("txb", "Cube")
  216.     generate_fiu_sigs("txb", "1DArray")
  217.     generate_fiu_sigs("txb", "2DArray")
  218.     generate_fiu_sigs("txb", "CubeArray")
  219.     generate_sigs("", "txb", "1DShadow", Single, 1);
  220.     generate_sigs("", "txb", "2DShadow", Single);
  221.     generate_sigs("", "txb", "CubeShadow", Single);
  222.     generate_sigs("", "txb", "1DArrayShadow", Single);
  223.     generate_sigs("", "txb", "2DArrayShadow", Single);
  224.     end_function(fs, "texture")
  225.  
  226.     start_function("textureProj")
  227.     generate_fiu_sigs("tex", "1D", Proj)
  228.     generate_fiu_sigs("tex", "1D", Proj, 2)
  229.     generate_fiu_sigs("tex", "2D", Proj)
  230.     generate_fiu_sigs("tex", "2D", Proj, 1)
  231.     generate_fiu_sigs("tex", "3D", Proj)
  232.     generate_sigs("", "tex", "1DShadow", Proj | Single, 1);
  233.     generate_sigs("", "tex", "2DShadow", Proj | Single);
  234.     generate_fiu_sigs("tex", "2DRect", Proj)
  235.     generate_fiu_sigs("tex", "2DRect", Proj, 1)
  236.     generate_sigs("", "tex", "2DRectShadow", Proj | Single);
  237.  
  238.     generate_fiu_sigs("txb", "1D", Proj)
  239.     generate_fiu_sigs("txb", "1D", Proj, 2)
  240.     generate_fiu_sigs("txb", "2D", Proj)
  241.     generate_fiu_sigs("txb", "2D", Proj, 1)
  242.     generate_fiu_sigs("txb", "3D", Proj)
  243.     generate_sigs("", "txb", "1DShadow", Proj | Single, 1);
  244.     generate_sigs("", "txb", "2DShadow", Proj | Single);
  245.     end_function(fs, "textureProj")
  246.  
  247.     start_function("textureLod")
  248.     generate_fiu_sigs("txl", "1D")
  249.     generate_fiu_sigs("txl", "2D")
  250.     generate_fiu_sigs("txl", "3D")
  251.     generate_fiu_sigs("txl", "Cube")
  252.     generate_fiu_sigs("txl", "1DArray")
  253.     generate_fiu_sigs("txl", "2DArray")
  254.     generate_sigs("", "txl", "1DShadow", Single, 1);
  255.     generate_sigs("", "txl", "2DShadow", Single);
  256.     generate_sigs("", "txl", "1DArrayShadow", Single);
  257.     # ARB_texture_cube_map_array extension
  258.     generate_fiu_sigs("txl", "CubeArray")
  259.     end_function(fs, "textureLod")
  260.  
  261.     start_function("textureLodOffset")
  262.     generate_fiu_sigs("txl", "1D", Offset)
  263.     generate_fiu_sigs("txl", "2D", Offset)
  264.     generate_fiu_sigs("txl", "3D", Offset)
  265.     generate_fiu_sigs("txl", "1DArray", Offset)
  266.     generate_fiu_sigs("txl", "2DArray", Offset)
  267.     generate_sigs("", "txl", "1DShadow", Offset | Single, 1);
  268.     generate_sigs("", "txl", "2DShadow", Offset | Single);
  269.     generate_sigs("", "txl", "1DArrayShadow", Offset | Single);
  270.     end_function(fs, "textureLodOffset")
  271.  
  272.     start_function("textureOffset")
  273.     generate_fiu_sigs("tex", "1D", Offset)
  274.     generate_fiu_sigs("tex", "2D", Offset)
  275.     generate_fiu_sigs("tex", "3D", Offset)
  276.     generate_fiu_sigs("tex", "2DRect", Offset)
  277.     generate_sigs("", "tex", "2DRectShadow", Offset | Single);
  278.     generate_fiu_sigs("tex", "1DArray", Offset)
  279.     generate_fiu_sigs("tex", "2DArray", Offset)
  280.     generate_sigs("", "tex", "1DShadow", Offset | Single, 1);
  281.     generate_sigs("", "tex", "2DShadow", Offset | Single);
  282.     generate_sigs("", "tex", "1DArrayShadow", Offset | Single);
  283.  
  284.     generate_fiu_sigs("txb", "1D", Offset)
  285.     generate_fiu_sigs("txb", "2D", Offset)
  286.     generate_fiu_sigs("txb", "3D", Offset)
  287.     generate_fiu_sigs("txb", "1DArray", Offset)
  288.     generate_fiu_sigs("txb", "2DArray", Offset)
  289.     generate_sigs("", "txb", "1DShadow", Offset | Single, 1);
  290.     generate_sigs("", "txb", "2DShadow", Offset | Single);
  291.     generate_sigs("", "txb", "1DArrayShadow", Offset | Single);
  292.     end_function(fs, "textureOffset")
  293.  
  294.     start_function("texelFetch")
  295.     generate_fiu_sigs("txf", "1D")
  296.     generate_fiu_sigs("txf", "2D")
  297.     generate_fiu_sigs("txf", "3D")
  298.     generate_fiu_sigs("txf", "2DRect")
  299.     generate_fiu_sigs("txf", "1DArray")
  300.     generate_fiu_sigs("txf", "2DArray")
  301.     generate_fiu_sigs("txf", "Buffer")
  302.     generate_fiu_sigs("txf_ms", "2DMS")
  303.     generate_fiu_sigs("txf_ms", "2DMSArray")
  304.     end_function(fs, "texelFetch")
  305.  
  306.     start_function("texelFetchOffset")
  307.     generate_fiu_sigs("txf", "1D", Offset)
  308.     generate_fiu_sigs("txf", "2D", Offset)
  309.     generate_fiu_sigs("txf", "3D", Offset)
  310.     generate_fiu_sigs("txf", "2DRect", Offset)
  311.     generate_fiu_sigs("txf", "1DArray", Offset)
  312.     generate_fiu_sigs("txf", "2DArray", Offset)
  313.     end_function(fs, "texelFetchOffset")
  314.  
  315.     start_function("textureProjOffset")
  316.     generate_fiu_sigs("tex", "1D", Proj | Offset)
  317.     generate_fiu_sigs("tex", "1D", Proj | Offset, 2)
  318.     generate_fiu_sigs("tex", "2D", Proj | Offset)
  319.     generate_fiu_sigs("tex", "2D", Proj | Offset, 1)
  320.     generate_fiu_sigs("tex", "3D", Proj | Offset)
  321.     generate_fiu_sigs("tex", "2DRect", Proj | Offset)
  322.     generate_fiu_sigs("tex", "2DRect", Proj | Offset, 1)
  323.     generate_sigs("", "tex", "2DRectShadow", Proj | Offset | Single);
  324.     generate_sigs("", "tex", "1DShadow", Proj | Offset | Single, 1);
  325.     generate_sigs("", "tex", "2DShadow", Proj | Offset | Single);
  326.  
  327.     generate_fiu_sigs("txb", "1D", Proj | Offset)
  328.     generate_fiu_sigs("txb", "1D", Proj | Offset, 2)
  329.     generate_fiu_sigs("txb", "2D", Proj | Offset)
  330.     generate_fiu_sigs("txb", "2D", Proj | Offset, 1)
  331.     generate_fiu_sigs("txb", "3D", Proj | Offset)
  332.     generate_sigs("", "txb", "1DShadow", Proj | Offset | Single, 1);
  333.     generate_sigs("", "txb", "2DShadow", Proj | Offset | Single);
  334.     end_function(fs, "textureProjOffset")
  335.  
  336.     start_function("textureProjLod")
  337.     generate_fiu_sigs("txl", "1D", Proj)
  338.     generate_fiu_sigs("txl", "1D", Proj, 2)
  339.     generate_fiu_sigs("txl", "2D", Proj)
  340.     generate_fiu_sigs("txl", "2D", Proj, 1)
  341.     generate_fiu_sigs("txl", "3D", Proj)
  342.     generate_sigs("", "txl", "1DShadow", Proj | Single, 1);
  343.     generate_sigs("", "txl", "2DShadow", Proj | Single);
  344.     end_function(fs, "textureProjLod")
  345.  
  346.     start_function("textureProjLodOffset")
  347.     generate_fiu_sigs("txl", "1D", Proj | Offset)
  348.     generate_fiu_sigs("txl", "1D", Proj | Offset, 2)
  349.     generate_fiu_sigs("txl", "2D", Proj | Offset)
  350.     generate_fiu_sigs("txl", "2D", Proj | Offset, 1)
  351.     generate_fiu_sigs("txl", "3D", Proj | Offset)
  352.     generate_sigs("", "txl", "1DShadow", Proj | Offset | Single, 1);
  353.     generate_sigs("", "txl", "2DShadow", Proj | Offset | Single);
  354.     end_function(fs, "textureProjLodOffset")
  355.  
  356.     start_function("textureGrad")
  357.     generate_fiu_sigs("txd", "1D")
  358.     generate_fiu_sigs("txd", "2D")
  359.     generate_fiu_sigs("txd", "3D")
  360.     generate_fiu_sigs("txd", "Cube")
  361.     generate_fiu_sigs("txd", "1DArray")
  362.     generate_fiu_sigs("txd", "2DArray")
  363.     generate_fiu_sigs("txd", "2DRect")
  364.     generate_sigs("", "txd", "2DRectShadow", Single);
  365.     generate_sigs("", "txd", "1DShadow", Single, 1);
  366.     generate_sigs("", "txd", "2DShadow", Single);
  367.     generate_sigs("", "txd", "CubeShadow", Single);
  368.     generate_sigs("", "txd", "1DArrayShadow", Single);
  369.     generate_sigs("", "txd", "2DArrayShadow", Single);
  370.     # ARB_texture_cube_map_array extension
  371.     generate_fiu_sigs("txd", "CubeArray")
  372.     end_function(fs, "textureGrad")
  373.  
  374.     start_function("textureGradOffset")
  375.     generate_fiu_sigs("txd", "1D", Offset)
  376.     generate_fiu_sigs("txd", "2D", Offset)
  377.     generate_fiu_sigs("txd", "3D", Offset)
  378.     generate_fiu_sigs("txd", "2DRect", Offset)
  379.     generate_sigs("", "txd", "2DRectShadow", Offset | Single);
  380.     generate_fiu_sigs("txd", "1DArray", Offset)
  381.     generate_fiu_sigs("txd", "2DArray", Offset)
  382.     generate_sigs("", "txd", "1DShadow", Offset | Single, 1);
  383.     generate_sigs("", "txd", "2DShadow", Offset | Single);
  384.     generate_sigs("", "txd", "1DArrayShadow", Offset | Single);
  385.     generate_sigs("", "txd", "2DArrayShadow", Offset | Single);
  386.     end_function(fs, "textureGradOffset")
  387.  
  388.     start_function("textureProjGrad")
  389.     generate_fiu_sigs("txd", "1D", Proj)
  390.     generate_fiu_sigs("txd", "1D", Proj, 2)
  391.     generate_fiu_sigs("txd", "2D", Proj)
  392.     generate_fiu_sigs("txd", "2D", Proj, 1)
  393.     generate_fiu_sigs("txd", "3D", Proj)
  394.     generate_fiu_sigs("txd", "2DRect", Proj)
  395.     generate_fiu_sigs("txd", "2DRect", Proj, 1)
  396.     generate_sigs("", "txd", "2DRectShadow", Proj | Single);
  397.     generate_sigs("", "txd", "1DShadow", Proj | Single, 1);
  398.     generate_sigs("", "txd", "2DShadow", Proj | Single);
  399.     end_function(fs, "textureProjGrad")
  400.  
  401.     start_function("textureProjGradOffset")
  402.     generate_fiu_sigs("txd", "1D", Proj | Offset)
  403.     generate_fiu_sigs("txd", "1D", Proj | Offset, 2)
  404.     generate_fiu_sigs("txd", "2D", Proj | Offset)
  405.     generate_fiu_sigs("txd", "2D", Proj | Offset, 1)
  406.     generate_fiu_sigs("txd", "3D", Proj | Offset)
  407.     generate_fiu_sigs("txd", "2DRect", Proj | Offset)
  408.     generate_fiu_sigs("txd", "2DRect", Proj | Offset, 1)
  409.     generate_sigs("", "txd", "2DRectShadow", Proj | Offset | Single);
  410.     generate_sigs("", "txd", "1DShadow", Proj | Offset | Single, 1);
  411.     generate_sigs("", "txd", "2DShadow", Proj | Offset | Single);
  412.     end_function(fs, "textureProjGradOffset")
  413.  
  414.  
  415.     # ARB_texture_rectangle extension
  416.     start_function("texture2DRect")
  417.     generate_sigs("", "tex", "2DRect")
  418.     end_function(fs, "texture2DRect")
  419.  
  420.     start_function("texture2DRectProj")
  421.     generate_sigs("", "tex", "2DRect", Proj)
  422.     generate_sigs("", "tex", "2DRect", Proj, 1)
  423.     end_function(fs, "texture2DRectProj")
  424.  
  425.     start_function("shadow2DRect")
  426.     generate_sigs("", "tex", "2DRectShadow")
  427.     end_function(fs, "shadow2DRect")
  428.  
  429.     start_function("shadow2DRectProj")
  430.     generate_sigs("", "tex", "2DRectShadow", Proj)
  431.     end_function(fs, "shadow2DRectProj")
  432.  
  433.     # EXT_texture_array extension
  434.     start_function("texture1DArray")
  435.     generate_sigs("", "tex", "1DArray")
  436.     generate_sigs("", "txb", "1DArray")
  437.     end_function(fs, "texture1DArray")
  438.  
  439.     start_function("texture1DArrayLod")
  440.     generate_sigs("", "txl", "1DArray")
  441.     end_function(fs, "texture1DArrayLod")
  442.  
  443.     start_function("texture2DArray")
  444.     generate_sigs("", "tex", "2DArray")
  445.     generate_sigs("", "txb", "2DArray")
  446.     end_function(fs, "texture2DArray")
  447.  
  448.     start_function("texture2DArrayLod")
  449.     generate_sigs("", "txl", "2DArray")
  450.     end_function(fs, "texture2DArrayLod")
  451.  
  452.     start_function("shadow1DArray")
  453.     generate_sigs("", "tex", "1DArrayShadow")
  454.     generate_sigs("", "txb", "1DArrayShadow")
  455.     end_function(fs, "shadow1DArray")
  456.  
  457.     start_function("shadow1DArrayLod")
  458.     generate_sigs("", "txl", "1DArrayShadow")
  459.     end_function(fs, "shadow1DArrayLod")
  460.  
  461.     start_function("shadow2DArray")
  462.     generate_sigs("", "tex", "2DArrayShadow")
  463.     end_function(fs, "shadow2DArray")
  464.  
  465.     # ARB_shader_texture_lod extension
  466.     start_function("texture1DGradARB")
  467.     generate_fiu_sigs("txd", "1D")
  468.     end_function(fs, "texture1DGradARB")
  469.  
  470.     start_function("texture2DGradARB")
  471.     generate_fiu_sigs("txd", "2D")
  472.     end_function(fs, "texture2DGradARB")
  473.  
  474.     start_function("texture3DGradARB")
  475.     generate_fiu_sigs("txd", "3D")
  476.     end_function(fs, "texture3DGradARB")
  477.  
  478.     start_function("textureCubeGradARB")
  479.     generate_fiu_sigs("txd", "Cube")
  480.     end_function(fs, "textureCubeGradARB")
  481.  
  482.     start_function("texture1DProjGradARB")
  483.     generate_fiu_sigs("txd", "1D", True)
  484.     generate_fiu_sigs("txd", "1D", True, 2)
  485.     end_function(fs, "texture1DProjGradARB")
  486.  
  487.     start_function("texture2DProjGradARB")
  488.     generate_fiu_sigs("txd", "2D", True)
  489.     generate_fiu_sigs("txd", "2D", True, 1)
  490.     end_function(fs, "texture2DProjGradARB")
  491.  
  492.     start_function("texture3DProjGradARB")
  493.     generate_fiu_sigs("txd", "3D", True)
  494.     end_function(fs, "texture3DProjGradARB")
  495.  
  496.     start_function("shadow1DGradARB")
  497.     generate_sigs("", "txd", "1DShadow", False, 1)
  498.     end_function(fs, "shadow1DGradARB")
  499.  
  500.     start_function("shadow1DProjGradARB")
  501.     generate_sigs("", "txd", "1DShadow", True, 1)
  502.     end_function(fs, "shadow1DProjGradARB")
  503.  
  504.     start_function("shadow2DGradARB")
  505.     generate_sigs("", "txd", "2DShadow", False)
  506.     end_function(fs, "shadow2DGradARB")
  507.  
  508.     start_function("shadow2DProjGradARB")
  509.     generate_sigs("", "txd", "2DShadow", True)
  510.     end_function(fs, "shadow2DProjGradARB")
  511.  
  512.     start_function("texture2DRectGradARB")
  513.     generate_sigs("", "txd", "2DRect")
  514.     end_function(fs, "texture2DRectGradARB")
  515.  
  516.     start_function("texture2DRectProjGradARB")
  517.     generate_sigs("", "txd", "2DRect", True)
  518.     generate_sigs("", "txd", "2DRect", True, 1)
  519.     end_function(fs, "texture2DRectProjGradARB")
  520.  
  521.     start_function("shadow2DRectGradARB")
  522.     generate_sigs("", "txd", "2DRectShadow", False)
  523.     end_function(fs, "shadow2DRectGradARB")
  524.  
  525.     start_function("shadow2DRectProjGradARB")
  526.     generate_sigs("", "txd", "2DRectShadow", True)
  527.     end_function(fs, "shadow2DRectProjGradARB")
  528.  
  529.     # Deprecated (110/120 style) functions with silly names:
  530.     start_function("texture1D")
  531.     generate_sigs("", "tex", "1D")
  532.     generate_sigs("", "txb", "1D")
  533.     end_function(fs, "texture1D")
  534.  
  535.     start_function("texture1DLod")
  536.     generate_sigs("", "txl", "1D")
  537.     end_function(fs, "texture1DLod")
  538.  
  539.     start_function("texture1DProj")
  540.     generate_sigs("", "tex", "1D", Proj)
  541.     generate_sigs("", "tex", "1D", Proj, 2)
  542.     generate_sigs("", "txb", "1D", Proj)
  543.     generate_sigs("", "txb", "1D", Proj, 2)
  544.     end_function(fs, "texture1DProj")
  545.  
  546.     start_function("texture1DProjLod")
  547.     generate_sigs("", "txl", "1D", Proj)
  548.     generate_sigs("", "txl", "1D", Proj, 2)
  549.     end_function(fs, "texture1DProjLod")
  550.  
  551.     start_function("texture2D")
  552.     generate_sigs("", "tex", "2D")
  553.     generate_sigs("", "txb", "2D")
  554.     # OES_EGL_image_external
  555.     generate_sigs("", "tex", "ExternalOES")
  556.     end_function(fs, "texture2D")
  557.  
  558.     start_function("texture2DLod")
  559.     generate_sigs("", "txl", "2D")
  560.     end_function(fs, "texture2DLod")
  561.  
  562.     start_function("texture2DProj")
  563.     generate_sigs("", "tex", "2D", Proj)
  564.     generate_sigs("", "tex", "2D", Proj, 1)
  565.     generate_sigs("", "txb", "2D", Proj)
  566.     generate_sigs("", "txb", "2D", Proj, 1)
  567.     # OES_EGL_image_external
  568.     generate_sigs("", "tex", "ExternalOES", Proj)
  569.     generate_sigs("", "tex", "ExternalOES", Proj, 1)
  570.     end_function(fs, "texture2DProj")
  571.  
  572.     start_function("texture2DProjLod")
  573.     generate_sigs("", "txl", "2D", Proj)
  574.     generate_sigs("", "txl", "2D", Proj, 1)
  575.     end_function(fs, "texture2DProjLod")
  576.  
  577.     start_function("texture3D")
  578.     generate_sigs("", "tex", "3D")
  579.     generate_sigs("", "txb", "3D")
  580.     end_function(fs, "texture3D")
  581.  
  582.     start_function("texture3DLod")
  583.     generate_sigs("", "txl", "3D")
  584.     end_function(fs, "texture3DLod")
  585.  
  586.     start_function("texture3DProj")
  587.     generate_sigs("", "tex", "3D", Proj)
  588.     generate_sigs("", "txb", "3D", Proj)
  589.     end_function(fs, "texture3DProj")
  590.  
  591.     start_function("texture3DProjLod")
  592.     generate_sigs("", "txl", "3D", Proj)
  593.     end_function(fs, "texture3DProjLod")
  594.  
  595.     start_function("textureCube")
  596.     generate_sigs("", "tex", "Cube")
  597.     generate_sigs("", "txb", "Cube")
  598.     end_function(fs, "textureCube")
  599.  
  600.     start_function("textureCubeLod")
  601.     generate_sigs("", "txl", "Cube")
  602.     end_function(fs, "textureCubeLod")
  603.  
  604.     start_function("shadow1D")
  605.     generate_sigs("", "tex", "1DShadow", False, 1)
  606.     generate_sigs("", "txb", "1DShadow", False, 1)
  607.     end_function(fs, "shadow1D")
  608.  
  609.     start_function("shadow1DLod")
  610.     generate_sigs("", "txl", "1DShadow", False, 1)
  611.     end_function(fs, "shadow1DLod")
  612.  
  613.     start_function("shadow1DProj")
  614.     generate_sigs("", "tex", "1DShadow", Proj, 1)
  615.     generate_sigs("", "txb", "1DShadow", Proj, 1)
  616.     end_function(fs, "shadow1DProj")
  617.  
  618.     start_function("shadow1DProjLod")
  619.     generate_sigs("", "txl", "1DShadow", Proj, 1)
  620.     end_function(fs, "shadow1DProjLod")
  621.  
  622.     start_function("shadow2D")
  623.     generate_sigs("", "tex", "2DShadow")
  624.     generate_sigs("", "txb", "2DShadow")
  625.     end_function(fs, "shadow2D")
  626.  
  627.     start_function("shadow2DLod")
  628.     generate_sigs("", "txl", "2DShadow")
  629.     end_function(fs, "shadow2DLod")
  630.  
  631.     start_function("shadow2DProj")
  632.     generate_sigs("", "tex", "2DShadow", Proj)
  633.     generate_sigs("", "txb", "2DShadow", Proj)
  634.     end_function(fs, "shadow2DProj")
  635.  
  636.     start_function("shadow2DProjLod")
  637.     generate_sigs("", "txl", "2DShadow", Proj)
  638.     end_function(fs, "shadow2DProjLod")
  639.  
  640.     start_function("textureQueryLOD")
  641.     generate_fiu_sigs("lod", "1D")
  642.     generate_fiu_sigs("lod", "2D")
  643.     generate_fiu_sigs("lod", "3D")
  644.     generate_fiu_sigs("lod", "Cube")
  645.     generate_fiu_sigs("lod", "1DArray")
  646.     generate_fiu_sigs("lod", "2DArray")
  647.     generate_fiu_sigs("lod", "CubeArray")
  648.     generate_sigs("", "lod", "1DShadow")
  649.     generate_sigs("", "lod", "2DShadow")
  650.     generate_sigs("", "lod", "CubeShadow")
  651.     generate_sigs("", "lod", "1DArrayShadow")
  652.     generate_sigs("", "lod", "2DArrayShadow")
  653.     generate_sigs("", "lod", "CubeArrayShadow")
  654.     end_function(fs, "textureQueryLOD")
  655.  
  656.     sys.stdout = sys.__stdout__
  657.     return fs
  658.  
  659. # If you actually run this script, it'll print out all the functions.
  660. if __name__ == "__main__":
  661.     fs = {}
  662.     generate_texture_functions(fs);
  663.     for k, v in fs.iteritems():
  664.         print v
  665.