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