glsl: add builtins for geometry shaders.
[mesa.git] / src / glsl / builtins / tools / texture_builtins.py
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