Merge branch 'mesa_7_7_branch'
[mesa.git] / src / gallium / auxiliary / tgsi / tgsi-instruction-set.txt
1 TGSI Instruction Specification
2 ==============================
3 ==============================
4
5
6 1 Instruction Set Operations
7 =============================
8
9
10 1.1 GL_NV_vertex_program
11 -------------------------
12
13
14 1.1.1 ARL - Address Register Load
15
16 dst.x = floor(src.x)
17 dst.y = floor(src.y)
18 dst.z = floor(src.z)
19 dst.w = floor(src.w)
20
21
22 1.1.2 MOV - Move
23
24 dst.x = src.x
25 dst.y = src.y
26 dst.z = src.z
27 dst.w = src.w
28
29
30 1.1.3 LIT - Light Coefficients
31
32 dst.x = 1.0
33 dst.y = max(src.x, 0.0)
34 dst.z = (src.x > 0.0) ? pow(max(src.y, 0.0), clamp(src.w, -128.0, 128.0)) : 0.0
35 dst.w = 1.0
36
37
38 1.1.4 RCP - Reciprocal
39
40 dst.x = 1.0 / src.x
41 dst.y = 1.0 / src.x
42 dst.z = 1.0 / src.x
43 dst.w = 1.0 / src.x
44
45
46 1.1.5 RSQ - Reciprocal Square Root
47
48 dst.x = 1.0 / sqrt(abs(src.x))
49 dst.y = 1.0 / sqrt(abs(src.x))
50 dst.z = 1.0 / sqrt(abs(src.x))
51 dst.w = 1.0 / sqrt(abs(src.x))
52
53
54 1.1.6 EXP - Approximate Exponential Base 2
55
56 dst.x = pow(2.0, floor(src.x))
57 dst.y = src.x - floor(src.x)
58 dst.z = pow(2.0, src.x)
59 dst.w = 1.0
60
61
62 1.1.7 LOG - Approximate Logarithm Base 2
63
64 dst.x = floor(lg2(abs(src.x)))
65 dst.y = abs(src.x) / pow(2.0, floor(lg2(abs(src.x))))
66 dst.z = lg2(abs(src.x))
67 dst.w = 1.0
68
69
70 1.1.8 MUL - Multiply
71
72 dst.x = src0.x * src1.x
73 dst.y = src0.y * src1.y
74 dst.z = src0.z * src1.z
75 dst.w = src0.w * src1.w
76
77
78 1.1.9 ADD - Add
79
80 dst.x = src0.x + src1.x
81 dst.y = src0.y + src1.y
82 dst.z = src0.z + src1.z
83 dst.w = src0.w + src1.w
84
85
86 1.1.10 DP3 - 3-component Dot Product
87
88 dst.x = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z
89 dst.y = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z
90 dst.z = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z
91 dst.w = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z
92
93
94 1.1.11 DP4 - 4-component Dot Product
95
96 dst.x = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src0.w * src1.w
97 dst.y = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src0.w * src1.w
98 dst.z = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src0.w * src1.w
99 dst.w = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src0.w * src1.w
100
101
102 1.1.12 DST - Distance Vector
103
104 dst.x = 1.0
105 dst.y = src0.y * src1.y
106 dst.z = src0.z
107 dst.w = src1.w
108
109
110 1.1.13 MIN - Minimum
111
112 dst.x = min(src0.x, src1.x)
113 dst.y = min(src0.y, src1.y)
114 dst.z = min(src0.z, src1.z)
115 dst.w = min(src0.w, src1.w)
116
117
118 1.1.14 MAX - Maximum
119
120 dst.x = max(src0.x, src1.x)
121 dst.y = max(src0.y, src1.y)
122 dst.z = max(src0.z, src1.z)
123 dst.w = max(src0.w, src1.w)
124
125
126 1.1.15 SLT - Set On Less Than
127
128 dst.x = (src0.x < src1.x) ? 1.0 : 0.0
129 dst.y = (src0.y < src1.y) ? 1.0 : 0.0
130 dst.z = (src0.z < src1.z) ? 1.0 : 0.0
131 dst.w = (src0.w < src1.w) ? 1.0 : 0.0
132
133
134 1.1.16 SGE - Set On Greater Equal Than
135
136 dst.x = (src0.x >= src1.x) ? 1.0 : 0.0
137 dst.y = (src0.y >= src1.y) ? 1.0 : 0.0
138 dst.z = (src0.z >= src1.z) ? 1.0 : 0.0
139 dst.w = (src0.w >= src1.w) ? 1.0 : 0.0
140
141
142 1.1.17 MAD - Multiply And Add
143
144 dst.x = src0.x * src1.x + src2.x
145 dst.y = src0.y * src1.y + src2.y
146 dst.z = src0.z * src1.z + src2.z
147 dst.w = src0.w * src1.w + src2.w
148
149
150 1.2 GL_ATI_fragment_shader
151 ---------------------------
152
153
154 1.2.1 SUB - Subtract
155
156 dst.x = src0.x - src1.x
157 dst.y = src0.y - src1.y
158 dst.z = src0.z - src1.z
159 dst.w = src0.w - src1.w
160
161
162 1.2.2 DOT3 - 3-component Dot Product
163
164 Alias for DP3.
165
166
167 1.2.3 DOT4 - 4-component Dot Product
168
169 Alias for DP4.
170
171
172 1.2.4 LERP - Linear Interpolate
173
174 dst.x = src0.x * (src1.x - src2.x) + src2.x
175 dst.y = src0.y * (src1.y - src2.y) + src2.y
176 dst.z = src0.z * (src1.z - src2.z) + src2.z
177 dst.w = src0.w * (src1.w - src2.w) + src2.w
178
179
180 1.2.5 CND - Condition
181
182 dst.x = (src2.x > 0.5) ? src0.x : src1.x
183 dst.y = (src2.y > 0.5) ? src0.y : src1.y
184 dst.z = (src2.z > 0.5) ? src0.z : src1.z
185 dst.w = (src2.w > 0.5) ? src0.w : src1.w
186
187
188 1.2.6 CND0 - Condition Zero
189
190 Removed. Use (CMP src2, src1, src0) instead.
191
192 1.2.7 DOT2ADD - 2-component Dot Product And Add
193
194 dst.x = src0.x * src1.x + src0.y * src1.y + src2.x
195 dst.y = src0.x * src1.x + src0.y * src1.y + src2.x
196 dst.z = src0.x * src1.x + src0.y * src1.y + src2.x
197 dst.w = src0.x * src1.x + src0.y * src1.y + src2.x
198
199
200 1.3 GL_EXT_vertex_shader
201 -------------------------
202
203
204 1.3.1 INDEX - Array Lookup
205
206 Considered for removal from language.
207
208
209 1.3.2 NEGATE - Negate
210
211 Considered for removal from language.
212
213
214 1.3.3 MADD - Multiply And Add
215
216 Alias for MAD.
217
218
219 1.3.4 FRAC - Fraction
220
221 dst.x = src.x - floor(src.x)
222 dst.y = src.y - floor(src.y)
223 dst.z = src.z - floor(src.z)
224 dst.w = src.w - floor(src.w)
225
226
227 1.3.5 SETGE - Set On Greater Equal
228
229 Alias for SGE.
230
231
232 1.3.6 SETLT - Set On Less Than
233
234 Alias for SLT.
235
236
237 1.3.7 CLAMP - Clamp
238
239 dst.x = clamp(src0.x, src1.x, src2.x)
240 dst.y = clamp(src0.y, src1.y, src2.y)
241 dst.z = clamp(src0.z, src1.z, src2.z)
242 dst.w = clamp(src0.w, src1.w, src2.w)
243
244
245 1.3.8 FLOOR - Floor
246
247 dst.x = floor(src.x)
248 dst.y = floor(src.y)
249 dst.z = floor(src.z)
250 dst.w = floor(src.w)
251
252
253 1.3.9 ROUND - Round
254
255 dst.x = round(src.x)
256 dst.y = round(src.y)
257 dst.z = round(src.z)
258 dst.w = round(src.w)
259
260
261 1.3.10 EXPBASE2 - Exponential Base 2
262
263 dst.x = pow(2.0, src.x)
264 dst.y = pow(2.0, src.x)
265 dst.z = pow(2.0, src.x)
266 dst.w = pow(2.0, src.x)
267
268
269 1.3.11 LOGBASE2 - Logarithm Base 2
270
271 dst.x = lg2(src.x)
272 dst.y = lg2(src.x)
273 dst.z = lg2(src.x)
274 dst.w = lg2(src.x)
275
276
277 1.3.12 POWER - Power
278
279 dst.x = pow(src0.x, src1.x)
280 dst.y = pow(src0.x, src1.x)
281 dst.z = pow(src0.x, src1.x)
282 dst.w = pow(src0.x, src1.x)
283
284
285 1.3.13 RECIP - Reciprocal
286
287 Alias for RCP.
288
289
290 1.3.14 RECIPSQRT - Reciprocal Square Root
291
292 Alias for RSQ.
293
294
295 1.3.15 CROSSPRODUCT - Cross Product
296
297 dst.x = src0.y * src1.z - src1.y * src0.z
298 dst.y = src0.z * src1.x - src1.z * src0.x
299 dst.z = src0.x * src1.y - src1.x * src0.y
300 dst.w = 1.0
301
302
303 1.3.16 MULTIPLYMATRIX - Multiply Matrix
304
305 Considered for removal from language.
306
307
308 1.4 GL_NV_vertex_program1_1
309 ----------------------------
310
311
312 1.4.1 ABS - Absolute
313
314 dst.x = abs(src.x)
315 dst.y = abs(src.y)
316 dst.z = abs(src.z)
317 dst.w = abs(src.w)
318
319
320 1.4.2 RCC - Reciprocal Clamped
321
322 dst.x = (1.0 / src.x) > 0.0 ? clamp(1.0 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1.0 / src.x, -1.884467e+019, -5.42101e-020)
323 dst.y = (1.0 / src.x) > 0.0 ? clamp(1.0 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1.0 / src.x, -1.884467e+019, -5.42101e-020)
324 dst.z = (1.0 / src.x) > 0.0 ? clamp(1.0 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1.0 / src.x, -1.884467e+019, -5.42101e-020)
325 dst.w = (1.0 / src.x) > 0.0 ? clamp(1.0 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1.0 / src.x, -1.884467e+019, -5.42101e-020)
326
327
328 1.4.3 DPH - Homogeneous Dot Product
329
330 dst.x = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w
331 dst.y = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w
332 dst.z = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w
333 dst.w = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w
334
335
336 1.5 GL_NV_fragment_program
337 ---------------------------
338
339
340 1.5.1 COS - Cosine
341
342 dst.x = cos(src.x)
343 dst.y = cos(src.x)
344 dst.z = cos(src.x)
345 dst.w = cos(src.w)
346
347
348 1.5.2 DDX - Derivative Relative To X
349
350 dst.x = partialx(src.x)
351 dst.y = partialx(src.y)
352 dst.z = partialx(src.z)
353 dst.w = partialx(src.w)
354
355
356 1.5.3 DDY - Derivative Relative To Y
357
358 dst.x = partialy(src.x)
359 dst.y = partialy(src.y)
360 dst.z = partialy(src.z)
361 dst.w = partialy(src.w)
362
363
364 1.5.4 EX2 - Exponential Base 2
365
366 Alias for EXPBASE2.
367
368
369 1.5.5 FLR - Floor
370
371 Alias for FLOOR.
372
373
374 1.5.6 FRC - Fraction
375
376 Alias for FRAC.
377
378
379 1.5.7 KILP - Predicated Discard
380
381 discard
382
383
384 1.5.8 LG2 - Logarithm Base 2
385
386 Alias for LOGBASE2.
387
388
389 1.5.9 LRP - Linear Interpolate
390
391 Alias for LERP.
392
393
394 1.5.10 PK2H - Pack Two 16-bit Floats
395
396 TBD
397
398
399 1.5.11 PK2US - Pack Two Unsigned 16-bit Scalars
400
401 TBD
402
403
404 1.5.12 PK4B - Pack Four Signed 8-bit Scalars
405
406 TBD
407
408
409 1.5.13 PK4UB - Pack Four Unsigned 8-bit Scalars
410
411 TBD
412
413
414 1.5.14 POW - Power
415
416 Alias for POWER.
417
418
419 1.5.15 RFL - Reflection Vector
420
421 dst.x = 2.0 * (src0.x * src1.x + src0.y * src1.y + src0.z * src1.z) / (src0.x * src0.x + src0.y * src0.y + src0.z * src0.z) * src0.x - src1.x
422 dst.y = 2.0 * (src0.x * src1.x + src0.y * src1.y + src0.z * src1.z) / (src0.x * src0.x + src0.y * src0.y + src0.z * src0.z) * src0.y - src1.y
423 dst.z = 2.0 * (src0.x * src1.x + src0.y * src1.y + src0.z * src1.z) / (src0.x * src0.x + src0.y * src0.y + src0.z * src0.z) * src0.z - src1.z
424 dst.w = 1.0
425
426
427 1.5.16 SEQ - Set On Equal
428
429 dst.x = (src0.x == src1.x) ? 1.0 : 0.0
430 dst.y = (src0.y == src1.y) ? 1.0 : 0.0
431 dst.z = (src0.z == src1.z) ? 1.0 : 0.0
432 dst.w = (src0.w == src1.w) ? 1.0 : 0.0
433
434
435 1.5.17 SFL - Set On False
436
437 dst.x = 0.0
438 dst.y = 0.0
439 dst.z = 0.0
440 dst.w = 0.0
441
442
443 1.5.18 SGT - Set On Greater Than
444
445 dst.x = (src0.x > src1.x) ? 1.0 : 0.0
446 dst.y = (src0.y > src1.y) ? 1.0 : 0.0
447 dst.z = (src0.z > src1.z) ? 1.0 : 0.0
448 dst.w = (src0.w > src1.w) ? 1.0 : 0.0
449
450
451 1.5.19 SIN - Sine
452
453 dst.x = sin(src.x)
454 dst.y = sin(src.x)
455 dst.z = sin(src.x)
456 dst.w = sin(src.w)
457
458
459 1.5.20 SLE - Set On Less Equal Than
460
461 dst.x = (src0.x <= src1.x) ? 1.0 : 0.0
462 dst.y = (src0.y <= src1.y) ? 1.0 : 0.0
463 dst.z = (src0.z <= src1.z) ? 1.0 : 0.0
464 dst.w = (src0.w <= src1.w) ? 1.0 : 0.0
465
466
467 1.5.21 SNE - Set On Not Equal
468
469 dst.x = (src0.x != src1.x) ? 1.0 : 0.0
470 dst.y = (src0.y != src1.y) ? 1.0 : 0.0
471 dst.z = (src0.z != src1.z) ? 1.0 : 0.0
472 dst.w = (src0.w != src1.w) ? 1.0 : 0.0
473
474
475 1.5.22 STR - Set On True
476
477 dst.x = 1.0
478 dst.y = 1.0
479 dst.z = 1.0
480 dst.w = 1.0
481
482
483 1.5.23 TEX - Texture Lookup
484
485 TBD
486
487
488 1.5.24 TXD - Texture Lookup with Derivatives
489
490 TBD
491
492
493 1.5.25 TXP - Projective Texture Lookup
494
495 TBD
496
497
498 1.5.26 UP2H - Unpack Two 16-Bit Floats
499
500 TBD
501
502
503 1.5.27 UP2US - Unpack Two Unsigned 16-Bit Scalars
504
505 TBD
506
507
508 1.5.28 UP4B - Unpack Four Signed 8-Bit Values
509
510 TBD
511
512
513 1.5.29 UP4UB - Unpack Four Unsigned 8-Bit Scalars
514
515 TBD
516
517
518 1.5.30 X2D - 2D Coordinate Transformation
519
520 dst.x = src0.x + src1.x * src2.x + src1.y * src2.y
521 dst.y = src0.y + src1.x * src2.z + src1.y * src2.w
522 dst.z = src0.x + src1.x * src2.x + src1.y * src2.y
523 dst.w = src0.y + src1.x * src2.z + src1.y * src2.w
524
525
526 1.6 GL_NV_vertex_program2
527 --------------------------
528
529
530 1.6.1 ARA - Address Register Add
531
532 TBD
533
534
535 1.6.2 ARR - Address Register Load With Round
536
537 dst.x = round(src.x)
538 dst.y = round(src.y)
539 dst.z = round(src.z)
540 dst.w = round(src.w)
541
542
543 1.6.3 BRA - Branch
544
545 pc = target
546
547
548 1.6.4 CAL - Subroutine Call
549
550 push(pc)
551 pc = target
552
553
554 1.6.5 RET - Subroutine Call Return
555
556 pc = pop()
557
558
559 1.6.6 SSG - Set Sign
560
561 dst.x = (src.x > 0.0) ? 1.0 : (src.x < 0.0) ? -1.0 : 0.0
562 dst.y = (src.y > 0.0) ? 1.0 : (src.y < 0.0) ? -1.0 : 0.0
563 dst.z = (src.z > 0.0) ? 1.0 : (src.z < 0.0) ? -1.0 : 0.0
564 dst.w = (src.w > 0.0) ? 1.0 : (src.w < 0.0) ? -1.0 : 0.0
565
566
567 1.7 GL_ARB_vertex_program
568 --------------------------
569
570
571 1.7.1 SWZ - Extended Swizzle
572
573 dst.x = src.x
574 dst.y = src.y
575 dst.z = src.z
576 dst.w = src.w
577
578
579 1.7.2 XPD - Cross Product
580
581 Alias for CROSSPRODUCT.
582
583
584 1.8 GL_ARB_fragment_program
585 ----------------------------
586
587
588 1.8.1 CMP - Compare
589
590 dst.x = (src0.x < 0.0) ? src1.x : src2.x
591 dst.y = (src0.y < 0.0) ? src1.y : src2.y
592 dst.z = (src0.z < 0.0) ? src1.z : src2.z
593 dst.w = (src0.w < 0.0) ? src1.w : src2.w
594
595
596 1.8.2 KIL - Conditional Discard
597
598 if (src.x < 0.0 || src.y < 0.0 || src.z < 0.0 || src.w < 0.0)
599 discard
600 endif
601
602
603 1.8.3 SCS - Sine Cosine
604
605 dst.x = cos(src.x)
606 dst.y = sin(src.x)
607 dst.z = 0.0
608 dst.y = 1.0
609
610
611 1.8.4 TXB - Texture Lookup With Bias
612
613 TBD
614
615
616 1.9 GL_NV_fragment_program2
617 ----------------------------
618
619
620 1.9.1 NRM - 3-component Vector Normalise
621
622 dst.x = src.x / (src.x * src.x + src.y * src.y + src.z * src.z)
623 dst.y = src.y / (src.x * src.x + src.y * src.y + src.z * src.z)
624 dst.z = src.z / (src.x * src.x + src.y * src.y + src.z * src.z)
625 dst.w = 1.0
626
627
628 1.9.2 DIV - Divide
629
630 dst.x = src0.x / src1.x
631 dst.y = src0.y / src1.y
632 dst.z = src0.z / src1.z
633 dst.w = src0.w / src1.w
634
635
636 1.9.3 DP2 - 2-component Dot Product
637
638 dst.x = src0.x * src1.x + src0.y * src1.y
639 dst.y = src0.x * src1.x + src0.y * src1.y
640 dst.z = src0.x * src1.x + src0.y * src1.y
641 dst.w = src0.x * src1.x + src0.y * src1.y
642
643
644 1.9.4 DP2A - 2-component Dot Product And Add
645
646 Alias for DOT2ADD.
647
648
649 1.9.5 TXL - Texture Lookup With LOD
650
651 TBD
652
653
654 1.9.6 BRK - Break
655
656 TBD
657
658
659 1.9.7 IF - If
660
661 TBD
662
663
664 1.9.8 BGNFOR - Begin a For-Loop
665
666 dst.x = floor(src.x)
667 dst.y = floor(src.y)
668 dst.z = floor(src.z)
669
670 if (dst.y <= 0)
671 pc = [matching ENDFOR] + 1
672 endif
673
674 Note: The destination must be a loop register.
675 The source must be a constant register.
676
677
678 1.9.9 REP - Repeat
679
680 TBD
681
682
683 1.9.10 ELSE - Else
684
685 TBD
686
687
688 1.9.11 ENDIF - End If
689
690 TBD
691
692
693 1.9.12 ENDFOR - End a For-Loop
694
695 dst.x = dst.x + dst.z
696 dst.y = dst.y - 1.0
697
698 if (dst.y > 0)
699 pc = [matching BGNFOR instruction] + 1
700 endif
701
702 Note: The destination must be a loop register.
703
704
705 1.9.13 ENDREP - End Repeat
706
707 TBD
708
709
710 1.10 GL_NV_vertex_program3
711 ---------------------------
712
713
714 1.10.1 PUSHA - Push Address Register On Stack
715
716 push(src.x)
717 push(src.y)
718 push(src.z)
719 push(src.w)
720
721
722 1.10.2 POPA - Pop Address Register From Stack
723
724 dst.w = pop()
725 dst.z = pop()
726 dst.y = pop()
727 dst.x = pop()
728
729
730 1.11 GL_NV_gpu_program4
731 ------------------------
732
733
734 1.11.1 CEIL - Ceiling
735
736 dst.x = ceil(src.x)
737 dst.y = ceil(src.y)
738 dst.z = ceil(src.z)
739 dst.w = ceil(src.w)
740
741
742 1.11.2 I2F - Integer To Float
743
744 dst.x = (float) src.x
745 dst.y = (float) src.y
746 dst.z = (float) src.z
747 dst.w = (float) src.w
748
749
750 1.11.3 NOT - Bitwise Not
751
752 dst.x = ~src.x
753 dst.y = ~src.y
754 dst.z = ~src.z
755 dst.w = ~src.w
756
757
758 1.11.4 TRUNC - Truncate
759
760 dst.x = trunc(src.x)
761 dst.y = trunc(src.y)
762 dst.z = trunc(src.z)
763 dst.w = trunc(src.w)
764
765
766 1.11.5 SHL - Shift Left
767
768 dst.x = src0.x << src1.x
769 dst.y = src0.y << src1.x
770 dst.z = src0.z << src1.x
771 dst.w = src0.w << src1.x
772
773
774 1.11.6 SHR - Shift Right
775
776 dst.x = src0.x >> src1.x
777 dst.y = src0.y >> src1.x
778 dst.z = src0.z >> src1.x
779 dst.w = src0.w >> src1.x
780
781
782 1.11.7 AND - Bitwise And
783
784 dst.x = src0.x & src1.x
785 dst.y = src0.y & src1.y
786 dst.z = src0.z & src1.z
787 dst.w = src0.w & src1.w
788
789
790 1.11.8 OR - Bitwise Or
791
792 dst.x = src0.x | src1.x
793 dst.y = src0.y | src1.y
794 dst.z = src0.z | src1.z
795 dst.w = src0.w | src1.w
796
797
798 1.11.9 MOD - Modulus
799
800 dst.x = src0.x % src1.x
801 dst.y = src0.y % src1.y
802 dst.z = src0.z % src1.z
803 dst.w = src0.w % src1.w
804
805
806 1.11.10 XOR - Bitwise Xor
807
808 dst.x = src0.x ^ src1.x
809 dst.y = src0.y ^ src1.y
810 dst.z = src0.z ^ src1.z
811 dst.w = src0.w ^ src1.w
812
813
814 1.11.11 SAD - Sum Of Absolute Differences
815
816 dst.x = abs(src0.x - src1.x) + src2.x
817 dst.y = abs(src0.y - src1.y) + src2.y
818 dst.z = abs(src0.z - src1.z) + src2.z
819 dst.w = abs(src0.w - src1.w) + src2.w
820
821
822 1.11.12 TXF - Texel Fetch
823
824 TBD
825
826
827 1.11.13 TXQ - Texture Size Query
828
829 TBD
830
831
832 1.11.14 CONT - Continue
833
834 TBD
835
836
837 1.12 GL_NV_geometry_program4
838 -----------------------------
839
840
841 1.12.1 EMIT - Emit
842
843 TBD
844
845
846 1.12.2 ENDPRIM - End Primitive
847
848 TBD
849
850
851 1.13 GLSL
852 ----------
853
854
855 1.13.1 BGNLOOP - Begin a Loop
856
857 TBD
858
859
860 1.13.2 BGNSUB - Begin Subroutine
861
862 TBD
863
864
865 1.13.3 ENDLOOP - End a Loop
866
867 TBD
868
869
870 1.13.4 ENDSUB - End Subroutine
871
872 TBD
873
874
875 1.13.5 INT - Truncate
876
877 Alias for TRUNC.
878
879
880 1.13.6 NOISE1 - 1D Noise
881
882 TBD
883
884
885 1.13.7 NOISE2 - 2D Noise
886
887 TBD
888
889
890 1.13.8 NOISE3 - 3D Noise
891
892 TBD
893
894
895 1.13.9 NOISE4 - 4D Noise
896
897 TBD
898
899
900 1.13.10 NOP - No Operation
901
902 Do nothing.
903
904
905 1.14 ps_1_1
906 ------------
907
908
909 1.14.1 TEXKILL - Conditional Discard
910
911 Alias for KIL.
912
913
914 1.15 ps_1_4
915 ------------
916
917
918 1.15.1 TEXLD - Texture Lookup
919
920 Alias for TEX.
921
922
923 1.16 ps_2_0
924 ------------
925
926
927 1.16.1 M4X4 - Multiply Matrix
928
929 Alias for MULTIPLYMATRIX.
930
931
932 1.16.2 M4X3 - Multiply Matrix
933
934 Considered for removal from language.
935
936
937 1.16.3 M3X4 - Multiply Matrix
938
939 Considered for removal from language.
940
941
942 1.16.4 M3X3 - Multiply Matrix
943
944 Considered for removal from language.
945
946
947 1.16.5 M3X2 - Multiply Matrix
948
949 Considered for removal from language.
950
951
952 1.16.6 CRS - Cross Product
953
954 Alias for XPD.
955
956
957 1.16.7 NRM4 - 4-component Vector Normalise
958
959 dst.x = src.x / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
960 dst.y = src.y / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
961 dst.z = src.z / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
962 dst.w = src.w / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
963
964
965 1.16.8 SINCOS - Sine Cosine
966
967 Alias for SCS.
968
969
970 1.16.9 TEXLDB - Texture Lookup With Bias
971
972 Alias for TXB.
973
974
975 1.16.10 DP2ADD - 2-component Dot Product And Add
976
977 Alias for DP2A.
978
979
980 1.17 ps_2_x
981 ------------
982
983
984 1.17.1 CALL - Subroutine Call
985
986 Alias for CAL.
987
988
989 1.17.2 CALLNZ - Subroutine Call If Not Zero
990
991 TBD
992
993
994 1.17.3 IFC - If
995
996 TBD
997
998
999 1.17.4 BREAK - Break
1000
1001 Alias for BRK.
1002
1003
1004 1.17.5 BREAKC - Break Conditional
1005
1006 TBD
1007
1008
1009 1.17.6 DSX - Derivative Relative To X
1010
1011 Alias for DDX.
1012
1013
1014 1.17.7 DSY - Derivative Relative To Y
1015
1016 Alias for DDY.
1017
1018
1019 1.17.8 TEXLDD - Texture Lookup with Derivatives
1020
1021 Alias for TXD.
1022
1023
1024 1.18 vs_1_1
1025 ------------
1026
1027
1028 1.18.1 EXPP - Approximate Exponential Base 2
1029
1030 Use EXP. See also 1.19.3.
1031
1032
1033 1.18.2 LOGP - Logarithm Base 2
1034
1035 Use LOG. See also 1.19.4.
1036
1037
1038 1.19 vs_2_0
1039 ------------
1040
1041
1042 1.19.1 SGN - Set Sign
1043
1044 Alias for SSG.
1045
1046
1047 1.19.2 MOVA - Move Address Register
1048
1049 Alias for ARR.
1050
1051
1052 1.19.3 EXPP - Approximate Exponential Base 2
1053
1054 Use EX2.
1055
1056
1057 1.19.4 LOGP - Logarithm Base 2
1058
1059 Use LG2.
1060
1061
1062 2 Explanation of symbols used
1063 ==============================
1064
1065
1066 2.1 Functions
1067 --------------
1068
1069
1070 abs(x) Absolute value of x.
1071 |x|
1072 (x < 0.0) ? -x : x
1073
1074 ceil(x) Ceiling of x.
1075
1076 clamp(x,y,z) Clamp x between y and z.
1077 (x < y) ? y : (x > z) ? z : x
1078
1079 cos(x) Cosine of x.
1080
1081 floor(x) Floor of x.
1082
1083 lg2(x) Logarithm base 2 of x.
1084
1085 max(x,y) Maximum of x and y.
1086 (x > y) ? x : y
1087
1088 min(x,y) Minimum of x and y.
1089 (x < y) ? x : y
1090
1091 partialx(x) Derivative of x relative to fragment's X.
1092
1093 partialy(x) Derivative of x relative to fragment's Y.
1094
1095 pop() Pop from stack.
1096
1097 pow(x,y) Raise x to power of y.
1098
1099 push(x) Push x on stack.
1100
1101 round(x) Round x.
1102
1103 sin(x) Sine of x.
1104
1105 sqrt(x) Square root of x.
1106
1107 trunc(x) Truncate x.
1108
1109
1110 2.2 Keywords
1111 -------------
1112
1113
1114 discard Discard fragment.
1115
1116 dst First destination register.
1117
1118 dst0 First destination register.
1119
1120 pc Program counter.
1121
1122 src First source register.
1123
1124 src0 First source register.
1125
1126 src1 Second source register.
1127
1128 src2 Third source register.
1129
1130 target Label of target instruction.
1131
1132
1133 3 Other tokens
1134 ===============
1135
1136
1137 3.1 Declaration Semantic
1138 -------------------------
1139
1140
1141 Follows Declaration token if Semantic bit is set.
1142
1143 Since its purpose is to link a shader with other stages of the pipeline,
1144 it is valid to follow only those Declaration tokens that declare a register
1145 either in INPUT or OUTPUT file.
1146
1147 SemanticName field contains the semantic name of the register being declared.
1148 There is no default value.
1149
1150 SemanticIndex is an optional subscript that can be used to distinguish
1151 different register declarations with the same semantic name. The default value
1152 is 0.
1153
1154 The meanings of the individual semantic names are explained in the following
1155 sections.
1156
1157
1158 3.1.1 FACE
1159
1160 Valid only in a fragment shader INPUT declaration.
1161
1162 FACE.x is negative when the primitive is back facing. FACE.x is positive
1163 when the primitive is front facing.