g3dvl: Use sobel filter for chroma interpolation
[mesa/nouveau-pmpeg.git] / src / glsl / builtins / tools / texture_builtins.py
blob27cc027cd40650531b3497cbc98ff3a9956a008f
1 #!/usr/bin/python
3 import sys
4 import StringIO
6 # Bitfield constants for the 'variant' argument to generate_sigs
7 Proj = 1
8 Offset = 2
9 Single = 4
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)
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 else:
29 assert False ("coord_dim: invalid sampler_type: " + sampler_type)
30 return sampler_dim
32 # Get the coordinate dimension for a given sampler type.
33 # Array samplers also get +1 here since the layer is really an extra coordinate
34 def get_coord_dim(sampler_type):
35 coord_dim = get_sampler_dim(sampler_type)
36 if sampler_type.find("Array") != -1:
37 coord_dim += 1
38 return coord_dim
40 # Get the number of extra vector components (i.e. shadow comparitor)
41 def get_extra_dim(sampler_type, use_proj, unused_fields):
42 extra_dim = unused_fields
43 if sampler_type.find("Shadow") != -1:
44 extra_dim += 1
45 if use_proj:
46 extra_dim += 1
47 return extra_dim
49 def get_txs_dim(sampler_type):
50 if sampler_type.startswith("Cube"):
51 return 2
52 return get_coord_dim(sampler_type)
54 def generate_sigs(g, tex_inst, sampler_type, variant = 0, unused_fields = 0):
55 coord_dim = get_coord_dim(sampler_type)
56 extra_dim = get_extra_dim(sampler_type, variant & Proj, unused_fields)
57 offset_dim = get_sampler_dim(sampler_type)
59 if variant & Single:
60 return_type = "float"
61 elif tex_inst == "txs":
62 return_type = vec_type("i", get_txs_dim(sampler_type))
63 else:
64 return_type = g + "vec4"
66 # Print parameters
67 print " (signature", return_type
68 print " (parameters"
69 print " (declare (in) " + g + "sampler" + sampler_type + " sampler)",
70 if tex_inst != "txs":
71 print "\n (declare (in) " + vec_type("i" if tex_inst == "txf" else "", coord_dim + extra_dim) + " P)",
72 if tex_inst == "txl":
73 print "\n (declare (in) float lod)",
74 elif tex_inst == "txf" or tex_inst == "txs":
75 print "\n (declare (in) int lod)",
76 elif tex_inst == "txd":
77 grad_type = vec_type("", coord_dim)
78 print "\n (declare (in) " + grad_type + " dPdx)",
79 print "\n (declare (in) " + grad_type + " dPdy)",
81 if variant & Offset:
82 print "\n (declare (const_in) " + vec_type("i", offset_dim) + " offset)",
83 if tex_inst == "txb":
84 print "\n (declare (in) float bias)",
86 print ")\n ((return (" + tex_inst, return_type, "(var_ref sampler)",
88 if tex_inst != "txs":
89 # Coordinate
90 if extra_dim > 0:
91 print "(swiz " + "xyzw"[:coord_dim] + " (var_ref P))",
92 else:
93 print "(var_ref P)",
95 if variant & Offset:
96 print "(var_ref offset)",
97 else:
98 print "0",
100 if tex_inst != "txf" and tex_inst != "txs":
101 # Projective divisor
102 if variant & Proj:
103 print "(swiz " + "xyzw"[coord_dim + extra_dim-1] + " (var_ref P))",
104 else:
105 print "1",
107 # Shadow comparitor
108 if sampler_type == "2DArrayShadow": # a special case:
109 print "(swiz w (var_ref P))", # ...array layer is z; shadow is w
110 elif sampler_type.endswith("Shadow"):
111 print "(swiz z (var_ref P))",
112 else:
113 print "()",
115 # Bias/explicit LOD/gradient:
116 if tex_inst == "txb":
117 print "(var_ref bias)",
118 elif tex_inst == "txl" or tex_inst == "txf" or tex_inst == "txs":
119 print "(var_ref lod)",
120 elif tex_inst == "txd":
121 print "((var_ref dPdx) (var_ref dPdy))",
122 print "))))\n"
124 def generate_fiu_sigs(tex_inst, sampler_type, variant = 0, unused_fields = 0):
125 generate_sigs("", tex_inst, sampler_type, variant, unused_fields)
126 generate_sigs("i", tex_inst, sampler_type, variant, unused_fields)
127 generate_sigs("u", tex_inst, sampler_type, variant, unused_fields)
129 def start_function(name):
130 sys.stdout = StringIO.StringIO()
131 print "((function " + name
133 def end_function(fs, name):
134 print "))"
135 fs[name] = sys.stdout.getvalue();
136 sys.stdout.close()
138 # Generate all the functions and store them in the supplied dictionary.
139 # This is better than writing them to actual files since they should never be
140 # edited; it'd also be easy to confuse them with the many hand-generated files.
142 # Takes a dictionary as an argument.
143 def generate_texture_functions(fs):
144 start_function("textureSize")
145 generate_fiu_sigs("txs", "1D")
146 generate_fiu_sigs("txs", "2D")
147 generate_fiu_sigs("txs", "3D")
148 generate_fiu_sigs("txs", "Cube")
149 generate_fiu_sigs("txs", "1DArray")
150 generate_fiu_sigs("txs", "2DArray")
151 generate_sigs("", "txs", "1DShadow")
152 generate_sigs("", "txs", "2DShadow")
153 generate_sigs("", "txs", "CubeShadow")
154 generate_sigs("", "txs", "1DArrayShadow")
155 generate_sigs("", "txs", "2DArrayShadow")
156 end_function(fs, "textureSize")
158 start_function("texture")
159 generate_fiu_sigs("tex", "1D")
160 generate_fiu_sigs("tex", "2D")
161 generate_fiu_sigs("tex", "3D")
162 generate_fiu_sigs("tex", "Cube")
163 generate_fiu_sigs("tex", "1DArray")
164 generate_fiu_sigs("tex", "2DArray")
165 generate_sigs("", "tex", "1DShadow", Single, 1);
166 generate_sigs("", "tex", "2DShadow", Single);
167 generate_sigs("", "tex", "CubeShadow", Single);
168 generate_sigs("", "tex", "1DArrayShadow", Single);
169 generate_sigs("", "tex", "2DArrayShadow", Single);
171 generate_fiu_sigs("txb", "1D")
172 generate_fiu_sigs("txb", "2D")
173 generate_fiu_sigs("txb", "3D")
174 generate_fiu_sigs("txb", "Cube")
175 generate_fiu_sigs("txb", "1DArray")
176 generate_fiu_sigs("txb", "2DArray")
177 generate_sigs("", "txb", "1DShadow", Single, 1);
178 generate_sigs("", "txb", "2DShadow", Single);
179 generate_sigs("", "txb", "CubeShadow", Single);
180 generate_sigs("", "txb", "1DArrayShadow", Single);
181 generate_sigs("", "txb", "2DArrayShadow", Single);
182 end_function(fs, "texture")
184 start_function("textureProj")
185 generate_fiu_sigs("tex", "1D", Proj)
186 generate_fiu_sigs("tex", "1D", Proj, 2)
187 generate_fiu_sigs("tex", "2D", Proj)
188 generate_fiu_sigs("tex", "2D", Proj, 1)
189 generate_fiu_sigs("tex", "3D", Proj)
190 generate_sigs("", "tex", "1DShadow", Proj | Single, 1);
191 generate_sigs("", "tex", "2DShadow", Proj | Single);
193 generate_fiu_sigs("txb", "1D", Proj)
194 generate_fiu_sigs("txb", "1D", Proj, 2)
195 generate_fiu_sigs("txb", "2D", Proj)
196 generate_fiu_sigs("txb", "2D", Proj, 1)
197 generate_fiu_sigs("txb", "3D", Proj)
198 generate_sigs("", "txb", "1DShadow", Proj | Single, 1);
199 generate_sigs("", "txb", "2DShadow", Proj | Single);
200 end_function(fs, "textureProj")
202 start_function("textureLod")
203 generate_fiu_sigs("txl", "1D")
204 generate_fiu_sigs("txl", "2D")
205 generate_fiu_sigs("txl", "3D")
206 generate_fiu_sigs("txl", "Cube")
207 generate_fiu_sigs("txl", "1DArray")
208 generate_fiu_sigs("txl", "2DArray")
209 generate_sigs("", "txl", "1DShadow", Single, 1);
210 generate_sigs("", "txl", "2DShadow", Single);
211 generate_sigs("", "txl", "1DArrayShadow", Single);
212 end_function(fs, "textureLod")
214 start_function("textureLodOffset")
215 generate_fiu_sigs("txl", "1D", Offset)
216 generate_fiu_sigs("txl", "2D", Offset)
217 generate_fiu_sigs("txl", "3D", Offset)
218 generate_fiu_sigs("txl", "1DArray", Offset)
219 generate_fiu_sigs("txl", "2DArray", Offset)
220 generate_sigs("", "txl", "1DShadow", Offset | Single, 1);
221 generate_sigs("", "txl", "2DShadow", Offset | Single);
222 generate_sigs("", "txl", "1DArrayShadow", Offset | Single);
223 end_function(fs, "textureLodOffset")
225 start_function("textureOffset")
226 generate_fiu_sigs("tex", "1D", Offset)
227 generate_fiu_sigs("tex", "2D", Offset)
228 generate_fiu_sigs("tex", "3D", Offset)
229 generate_fiu_sigs("tex", "1DArray", Offset)
230 generate_fiu_sigs("tex", "2DArray", Offset)
231 generate_sigs("", "tex", "1DShadow", Offset | Single, 1);
232 generate_sigs("", "tex", "2DShadow", Offset | Single);
233 generate_sigs("", "tex", "1DArrayShadow", Offset | Single);
235 generate_fiu_sigs("txb", "1D", Offset)
236 generate_fiu_sigs("txb", "2D", Offset)
237 generate_fiu_sigs("txb", "3D", Offset)
238 generate_fiu_sigs("txb", "1DArray", Offset)
239 generate_fiu_sigs("txb", "2DArray", Offset)
240 generate_sigs("", "txb", "1DShadow", Offset | Single, 1);
241 generate_sigs("", "txb", "2DShadow", Offset | Single);
242 generate_sigs("", "txb", "1DArrayShadow", Offset | Single);
243 end_function(fs, "textureOffset")
245 start_function("texelFetch")
246 generate_fiu_sigs("txf", "1D")
247 generate_fiu_sigs("txf", "2D")
248 generate_fiu_sigs("txf", "3D")
249 generate_fiu_sigs("txf", "1DArray")
250 generate_fiu_sigs("txf", "2DArray")
251 end_function(fs, "texelFetch")
253 start_function("texelFetchOffset")
254 generate_fiu_sigs("txf", "1D", Offset)
255 generate_fiu_sigs("txf", "2D", Offset)
256 generate_fiu_sigs("txf", "3D", Offset)
257 generate_fiu_sigs("txf", "1DArray", Offset)
258 generate_fiu_sigs("txf", "2DArray", Offset)
259 end_function(fs, "texelFetchOffset")
261 start_function("textureProjOffset")
262 generate_fiu_sigs("tex", "1D", Proj | Offset)
263 generate_fiu_sigs("tex", "1D", Proj | Offset, 2)
264 generate_fiu_sigs("tex", "2D", Proj | Offset)
265 generate_fiu_sigs("tex", "2D", Proj | Offset, 1)
266 generate_fiu_sigs("tex", "3D", Proj | Offset)
267 generate_sigs("", "tex", "1DShadow", Proj | Offset | Single, 1);
268 generate_sigs("", "tex", "2DShadow", Proj | Offset | Single);
270 generate_fiu_sigs("txb", "1D", Proj | Offset)
271 generate_fiu_sigs("txb", "1D", Proj | Offset, 2)
272 generate_fiu_sigs("txb", "2D", Proj | Offset)
273 generate_fiu_sigs("txb", "2D", Proj | Offset, 1)
274 generate_fiu_sigs("txb", "3D", Proj | Offset)
275 generate_sigs("", "txb", "1DShadow", Proj | Offset | Single, 1);
276 generate_sigs("", "txb", "2DShadow", Proj | Offset | Single);
277 end_function(fs, "textureProjOffset")
279 start_function("textureProjLod")
280 generate_fiu_sigs("txl", "1D", Proj)
281 generate_fiu_sigs("txl", "1D", Proj, 2)
282 generate_fiu_sigs("txl", "2D", Proj)
283 generate_fiu_sigs("txl", "2D", Proj, 1)
284 generate_fiu_sigs("txl", "3D", Proj)
285 generate_sigs("", "txl", "1DShadow", Proj | Single, 1);
286 generate_sigs("", "txl", "2DShadow", Proj | Single);
287 end_function(fs, "textureProjLod")
289 start_function("textureProjLodOffset")
290 generate_fiu_sigs("txl", "1D", Proj | Offset)
291 generate_fiu_sigs("txl", "1D", Proj | Offset, 2)
292 generate_fiu_sigs("txl", "2D", Proj | Offset)
293 generate_fiu_sigs("txl", "2D", Proj | Offset, 1)
294 generate_fiu_sigs("txl", "3D", Proj | Offset)
295 generate_sigs("", "txl", "1DShadow", Proj | Offset | Single, 1);
296 generate_sigs("", "txl", "2DShadow", Proj | Offset | Single);
297 end_function(fs, "textureProjLodOffset")
299 start_function("textureGrad")
300 generate_fiu_sigs("txd", "1D")
301 generate_fiu_sigs("txd", "2D")
302 generate_fiu_sigs("txd", "3D")
303 generate_fiu_sigs("txd", "Cube")
304 generate_fiu_sigs("txd", "1DArray")
305 generate_fiu_sigs("txd", "2DArray")
306 generate_sigs("", "txd", "1DShadow", Single, 1);
307 generate_sigs("", "txd", "2DShadow", Single);
308 generate_sigs("", "txd", "CubeShadow", Single);
309 generate_sigs("", "txd", "1DArrayShadow", Single);
310 generate_sigs("", "txd", "2DArrayShadow", Single);
311 end_function(fs, "textureGrad")
313 start_function("textureGradOffset")
314 generate_fiu_sigs("txd", "1D", Offset)
315 generate_fiu_sigs("txd", "2D", Offset)
316 generate_fiu_sigs("txd", "3D", Offset)
317 generate_fiu_sigs("txd", "1DArray", Offset)
318 generate_fiu_sigs("txd", "2DArray", Offset)
319 generate_sigs("", "txd", "1DShadow", Offset | Single, 1);
320 generate_sigs("", "txd", "2DShadow", Offset | Single);
321 generate_sigs("", "txd", "1DArrayShadow", Offset | Single);
322 generate_sigs("", "txd", "2DArrayShadow", Offset | Single);
323 end_function(fs, "textureGradOffset")
325 start_function("textureProjGrad")
326 generate_fiu_sigs("txd", "1D", Proj)
327 generate_fiu_sigs("txd", "1D", Proj, 2)
328 generate_fiu_sigs("txd", "2D", Proj)
329 generate_fiu_sigs("txd", "2D", Proj, 1)
330 generate_fiu_sigs("txd", "3D", Proj)
331 generate_sigs("", "txd", "1DShadow", Proj | Single, 1);
332 generate_sigs("", "txd", "2DShadow", Proj | Single);
333 end_function(fs, "textureProjGrad")
335 start_function("textureProjGradOffset")
336 generate_fiu_sigs("txd", "1D", Proj | Offset)
337 generate_fiu_sigs("txd", "1D", Proj | Offset, 2)
338 generate_fiu_sigs("txd", "2D", Proj | Offset)
339 generate_fiu_sigs("txd", "2D", Proj | Offset, 1)
340 generate_fiu_sigs("txd", "3D", Proj | Offset)
341 generate_sigs("", "txd", "1DShadow", Proj | Offset | Single, 1);
342 generate_sigs("", "txd", "2DShadow", Proj | Offset | Single);
343 end_function(fs, "textureProjGradOffset")
346 # ARB_texture_rectangle extension
347 start_function("texture2DRect")
348 generate_sigs("", "tex", "2DRect")
349 end_function(fs, "texture2DRect")
351 start_function("texture2DRectProj")
352 generate_sigs("", "tex", "2DRect", Proj)
353 generate_sigs("", "tex", "2DRect", Proj, 1)
354 end_function(fs, "texture2DRectProj")
356 start_function("shadow2DRect")
357 generate_sigs("", "tex", "2DRectShadow")
358 end_function(fs, "shadow2DRect")
360 start_function("shadow2DRectProj")
361 generate_sigs("", "tex", "2DRectShadow", Proj)
362 end_function(fs, "shadow2DRectProj")
364 # EXT_texture_array extension
365 start_function("texture1DArray")
366 generate_sigs("", "tex", "1DArray")
367 generate_sigs("", "txb", "1DArray")
368 end_function(fs, "texture1DArray")
370 start_function("texture1DArrayLod")
371 generate_sigs("", "txl", "1DArray")
372 end_function(fs, "texture1DArrayLod")
374 start_function("texture2DArray")
375 generate_sigs("", "tex", "2DArray")
376 generate_sigs("", "txb", "2DArray")
377 end_function(fs, "texture2DArray")
379 start_function("texture2DArrayLod")
380 generate_sigs("", "txl", "2DArray")
381 end_function(fs, "texture2DArrayLod")
383 start_function("shadow1DArray")
384 generate_sigs("", "tex", "1DArrayShadow")
385 generate_sigs("", "txb", "1DArrayShadow")
386 end_function(fs, "shadow1DArray")
388 start_function("shadow1DArrayLod")
389 generate_sigs("", "txl", "1DArrayShadow")
390 end_function(fs, "shadow1DArrayLod")
392 start_function("shadow2DArray")
393 generate_sigs("", "tex", "2DArrayShadow")
394 end_function(fs, "shadow2DArray")
396 # ARB_shader_texture_lod extension
397 start_function("texture1DGradARB")
398 generate_fiu_sigs("txd", "1D")
399 end_function(fs, "texture1DGradARB")
401 start_function("texture2DGradARB")
402 generate_fiu_sigs("txd", "2D")
403 end_function(fs, "texture2DGradARB")
405 start_function("texture3DGradARB")
406 generate_fiu_sigs("txd", "3D")
407 end_function(fs, "texture3DGradARB")
409 start_function("textureCubeGradARB")
410 generate_fiu_sigs("txd", "Cube")
411 end_function(fs, "textureCubeGradARB")
413 start_function("texture1DProjGradARB")
414 generate_fiu_sigs("txd", "1D", True)
415 generate_fiu_sigs("txd", "1D", True, 2)
416 end_function(fs, "texture1DProjGradARB")
418 start_function("texture2DProjGradARB")
419 generate_fiu_sigs("txd", "2D", True)
420 generate_fiu_sigs("txd", "2D", True, 1)
421 end_function(fs, "texture2DProjGradARB")
423 start_function("texture3DProjGradARB")
424 generate_fiu_sigs("txd", "3D", True)
425 end_function(fs, "texture3DProjGradARB")
427 start_function("shadow1DGradARB")
428 generate_sigs("", "txd", "1DShadow", False, 1)
429 end_function(fs, "shadow1DGradARB")
431 start_function("shadow1DProjGradARB")
432 generate_sigs("", "txd", "1DShadow", True, 1)
433 end_function(fs, "shadow1DProjGradARB")
435 start_function("shadow2DGradARB")
436 generate_sigs("", "txd", "2DShadow", False)
437 end_function(fs, "shadow2DGradARB")
439 start_function("shadow2DProjGradARB")
440 generate_sigs("", "txd", "2DShadow", True)
441 end_function(fs, "shadow2DProjGradARB")
443 start_function("texture2DRectGradARB")
444 generate_sigs("", "txd", "2DRect")
445 end_function(fs, "texture2DRectGradARB")
447 start_function("texture2DRectProjGradARB")
448 generate_sigs("", "txd", "2DRect", True)
449 generate_sigs("", "txd", "2DRect", True, 1)
450 end_function(fs, "texture2DRectProjGradARB")
452 start_function("shadow2DRectGradARB")
453 generate_sigs("", "txd", "2DRectShadow", False)
454 end_function(fs, "shadow2DRectGradARB")
456 start_function("shadow2DRectProjGradARB")
457 generate_sigs("", "txd", "2DRectShadow", True)
458 end_function(fs, "shadow2DRectProjGradARB")
460 # Deprecated (110/120 style) functions with silly names:
461 start_function("texture1D")
462 generate_sigs("", "tex", "1D")
463 generate_sigs("", "txb", "1D")
464 end_function(fs, "texture1D")
466 start_function("texture1DLod")
467 generate_sigs("", "txl", "1D")
468 end_function(fs, "texture1DLod")
470 start_function("texture1DProj")
471 generate_sigs("", "tex", "1D", Proj)
472 generate_sigs("", "tex", "1D", Proj, 2)
473 generate_sigs("", "txb", "1D", Proj)
474 generate_sigs("", "txb", "1D", Proj, 2)
475 end_function(fs, "texture1DProj")
477 start_function("texture1DProjLod")
478 generate_sigs("", "txl", "1D", Proj)
479 generate_sigs("", "txl", "1D", Proj, 2)
480 end_function(fs, "texture1DProjLod")
482 start_function("texture2D")
483 generate_sigs("", "tex", "2D")
484 generate_sigs("", "txb", "2D")
485 # OES_EGL_image_external
486 generate_sigs("", "tex", "ExternalOES")
487 end_function(fs, "texture2D")
489 start_function("texture2DLod")
490 generate_sigs("", "txl", "2D")
491 end_function(fs, "texture2DLod")
493 start_function("texture2DProj")
494 generate_sigs("", "tex", "2D", Proj)
495 generate_sigs("", "tex", "2D", Proj, 1)
496 generate_sigs("", "txb", "2D", Proj)
497 generate_sigs("", "txb", "2D", Proj, 1)
498 # OES_EGL_image_external
499 generate_sigs("", "tex", "ExternalOES", Proj)
500 generate_sigs("", "tex", "ExternalOES", Proj, 1)
501 end_function(fs, "texture2DProj")
503 start_function("texture2DProjLod")
504 generate_sigs("", "txl", "2D", Proj)
505 generate_sigs("", "txl", "2D", Proj, 1)
506 end_function(fs, "texture2DProjLod")
508 start_function("texture3D")
509 generate_sigs("", "tex", "3D")
510 generate_sigs("", "txb", "3D")
511 end_function(fs, "texture3D")
513 start_function("texture3DLod")
514 generate_sigs("", "txl", "3D")
515 end_function(fs, "texture3DLod")
517 start_function("texture3DProj")
518 generate_sigs("", "tex", "3D", Proj)
519 generate_sigs("", "txb", "3D", Proj)
520 end_function(fs, "texture3DProj")
522 start_function("texture3DProjLod")
523 generate_sigs("", "txl", "3D", Proj)
524 end_function(fs, "texture3DProjLod")
526 start_function("textureCube")
527 generate_sigs("", "tex", "Cube")
528 generate_sigs("", "txb", "Cube")
529 end_function(fs, "textureCube")
531 start_function("textureCubeLod")
532 generate_sigs("", "txl", "Cube")
533 end_function(fs, "textureCubeLod")
535 start_function("shadow1D")
536 generate_sigs("", "tex", "1DShadow", False, 1)
537 generate_sigs("", "txb", "1DShadow", False, 1)
538 end_function(fs, "shadow1D")
540 start_function("shadow1DLod")
541 generate_sigs("", "txl", "1DShadow", False, 1)
542 end_function(fs, "shadow1DLod")
544 start_function("shadow1DProj")
545 generate_sigs("", "tex", "1DShadow", Proj, 1)
546 generate_sigs("", "txb", "1DShadow", Proj, 1)
547 end_function(fs, "shadow1DProj")
549 start_function("shadow1DProjLod")
550 generate_sigs("", "txl", "1DShadow", Proj, 1)
551 end_function(fs, "shadow1DProjLod")
553 start_function("shadow2D")
554 generate_sigs("", "tex", "2DShadow")
555 generate_sigs("", "txb", "2DShadow")
556 end_function(fs, "shadow2D")
558 start_function("shadow2DLod")
559 generate_sigs("", "txl", "2DShadow")
560 end_function(fs, "shadow2DLod")
562 start_function("shadow2DProj")
563 generate_sigs("", "tex", "2DShadow", Proj)
564 generate_sigs("", "txb", "2DShadow", Proj)
565 end_function(fs, "shadow2DProj")
567 start_function("shadow2DProjLod")
568 generate_sigs("", "txl", "2DShadow", Proj)
569 end_function(fs, "shadow2DProjLod")
571 sys.stdout = sys.__stdout__
572 return fs
574 # If you actually run this script, it'll print out all the functions.
575 if __name__ == "__main__":
576 fs = {}
577 generate_texture_functions(fs);
578 for k, v in fs.iteritems():
579 print v