Merge branch '7.8'
[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.10 ELSE - Else
665
666 TBD
667
668
669 1.9.11 ENDIF - End If
670
671 TBD
672
673
674 1.10 GL_NV_vertex_program3
675 ---------------------------
676
677
678 1.10.1 PUSHA - Push Address Register On Stack
679
680 push(src.x)
681 push(src.y)
682 push(src.z)
683 push(src.w)
684
685
686 1.10.2 POPA - Pop Address Register From Stack
687
688 dst.w = pop()
689 dst.z = pop()
690 dst.y = pop()
691 dst.x = pop()
692
693
694 1.11 GL_NV_gpu_program4
695 ------------------------
696
697
698 1.11.1 CEIL - Ceiling
699
700 dst.x = ceil(src.x)
701 dst.y = ceil(src.y)
702 dst.z = ceil(src.z)
703 dst.w = ceil(src.w)
704
705
706 1.11.2 I2F - Integer To Float
707
708 dst.x = (float) src.x
709 dst.y = (float) src.y
710 dst.z = (float) src.z
711 dst.w = (float) src.w
712
713
714 1.11.3 NOT - Bitwise Not
715
716 dst.x = ~src.x
717 dst.y = ~src.y
718 dst.z = ~src.z
719 dst.w = ~src.w
720
721
722 1.11.4 TRUNC - Truncate
723
724 dst.x = trunc(src.x)
725 dst.y = trunc(src.y)
726 dst.z = trunc(src.z)
727 dst.w = trunc(src.w)
728
729
730 1.11.5 SHL - Shift Left
731
732 dst.x = src0.x << src1.x
733 dst.y = src0.y << src1.x
734 dst.z = src0.z << src1.x
735 dst.w = src0.w << src1.x
736
737
738 1.11.6 SHR - Shift Right
739
740 dst.x = src0.x >> src1.x
741 dst.y = src0.y >> src1.x
742 dst.z = src0.z >> src1.x
743 dst.w = src0.w >> src1.x
744
745
746 1.11.7 AND - Bitwise And
747
748 dst.x = src0.x & src1.x
749 dst.y = src0.y & src1.y
750 dst.z = src0.z & src1.z
751 dst.w = src0.w & src1.w
752
753
754 1.11.8 OR - Bitwise Or
755
756 dst.x = src0.x | src1.x
757 dst.y = src0.y | src1.y
758 dst.z = src0.z | src1.z
759 dst.w = src0.w | src1.w
760
761
762 1.11.9 MOD - Modulus
763
764 dst.x = src0.x % src1.x
765 dst.y = src0.y % src1.y
766 dst.z = src0.z % src1.z
767 dst.w = src0.w % src1.w
768
769
770 1.11.10 XOR - Bitwise Xor
771
772 dst.x = src0.x ^ src1.x
773 dst.y = src0.y ^ src1.y
774 dst.z = src0.z ^ src1.z
775 dst.w = src0.w ^ src1.w
776
777
778 1.11.11 SAD - Sum Of Absolute Differences
779
780 dst.x = abs(src0.x - src1.x) + src2.x
781 dst.y = abs(src0.y - src1.y) + src2.y
782 dst.z = abs(src0.z - src1.z) + src2.z
783 dst.w = abs(src0.w - src1.w) + src2.w
784
785
786 1.11.12 TXF - Texel Fetch
787
788 TBD
789
790
791 1.11.13 TXQ - Texture Size Query
792
793 TBD
794
795
796 1.11.14 CONT - Continue
797
798 TBD
799
800
801 1.12 GL_NV_geometry_program4
802 -----------------------------
803
804
805 1.12.1 EMIT - Emit
806
807 TBD
808
809
810 1.12.2 ENDPRIM - End Primitive
811
812 TBD
813
814
815 1.13 GLSL
816 ----------
817
818
819 1.13.1 BGNLOOP - Begin a Loop
820
821 TBD
822
823
824 1.13.2 BGNSUB - Begin Subroutine
825
826 TBD
827
828
829 1.13.3 ENDLOOP - End a Loop
830
831 TBD
832
833
834 1.13.4 ENDSUB - End Subroutine
835
836 TBD
837
838
839 1.13.5 INT - Truncate
840
841 Alias for TRUNC.
842
843
844 1.13.6 NOISE1 - 1D Noise
845
846 TBD
847
848
849 1.13.7 NOISE2 - 2D Noise
850
851 TBD
852
853
854 1.13.8 NOISE3 - 3D Noise
855
856 TBD
857
858
859 1.13.9 NOISE4 - 4D Noise
860
861 TBD
862
863
864 1.13.10 NOP - No Operation
865
866 Do nothing.
867
868
869 1.14 ps_1_1
870 ------------
871
872
873 1.14.1 TEXKILL - Conditional Discard
874
875 Alias for KIL.
876
877
878 1.15 ps_1_4
879 ------------
880
881
882 1.15.1 TEXLD - Texture Lookup
883
884 Alias for TEX.
885
886
887 1.16 ps_2_0
888 ------------
889
890
891 1.16.1 M4X4 - Multiply Matrix
892
893 Alias for MULTIPLYMATRIX.
894
895
896 1.16.2 M4X3 - Multiply Matrix
897
898 Considered for removal from language.
899
900
901 1.16.3 M3X4 - Multiply Matrix
902
903 Considered for removal from language.
904
905
906 1.16.4 M3X3 - Multiply Matrix
907
908 Considered for removal from language.
909
910
911 1.16.5 M3X2 - Multiply Matrix
912
913 Considered for removal from language.
914
915
916 1.16.6 CRS - Cross Product
917
918 Alias for XPD.
919
920
921 1.16.7 NRM4 - 4-component Vector Normalise
922
923 dst.x = src.x / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
924 dst.y = src.y / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
925 dst.z = src.z / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
926 dst.w = src.w / (src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w)
927
928
929 1.16.8 SINCOS - Sine Cosine
930
931 Alias for SCS.
932
933
934 1.16.9 TEXLDB - Texture Lookup With Bias
935
936 Alias for TXB.
937
938
939 1.16.10 DP2ADD - 2-component Dot Product And Add
940
941 Alias for DP2A.
942
943
944 1.17 ps_2_x
945 ------------
946
947
948 1.17.1 CALL - Subroutine Call
949
950 Alias for CAL.
951
952
953 1.17.2 CALLNZ - Subroutine Call If Not Zero
954
955 TBD
956
957
958 1.17.3 IFC - If
959
960 TBD
961
962
963 1.17.4 BREAK - Break
964
965 Alias for BRK.
966
967
968 1.17.5 BREAKC - Break Conditional
969
970 TBD
971
972
973 1.17.6 DSX - Derivative Relative To X
974
975 Alias for DDX.
976
977
978 1.17.7 DSY - Derivative Relative To Y
979
980 Alias for DDY.
981
982
983 1.17.8 TEXLDD - Texture Lookup with Derivatives
984
985 Alias for TXD.
986
987
988 1.18 vs_1_1
989 ------------
990
991
992 1.18.1 EXPP - Approximate Exponential Base 2
993
994 Use EXP. See also 1.19.3.
995
996
997 1.18.2 LOGP - Logarithm Base 2
998
999 Use LOG. See also 1.19.4.
1000
1001
1002 1.19 vs_2_0
1003 ------------
1004
1005
1006 1.19.1 SGN - Set Sign
1007
1008 Alias for SSG.
1009
1010
1011 1.19.2 MOVA - Move Address Register
1012
1013 Alias for ARR.
1014
1015
1016 1.19.3 EXPP - Approximate Exponential Base 2
1017
1018 Use EX2.
1019
1020
1021 1.19.4 LOGP - Logarithm Base 2
1022
1023 Use LG2.
1024
1025
1026 2 Explanation of symbols used
1027 ==============================
1028
1029
1030 2.1 Functions
1031 --------------
1032
1033
1034 abs(x) Absolute value of x.
1035 |x|
1036 (x < 0.0) ? -x : x
1037
1038 ceil(x) Ceiling of x.
1039
1040 clamp(x,y,z) Clamp x between y and z.
1041 (x < y) ? y : (x > z) ? z : x
1042
1043 cos(x) Cosine of x.
1044
1045 floor(x) Floor of x.
1046
1047 lg2(x) Logarithm base 2 of x.
1048
1049 max(x,y) Maximum of x and y.
1050 (x > y) ? x : y
1051
1052 min(x,y) Minimum of x and y.
1053 (x < y) ? x : y
1054
1055 partialx(x) Derivative of x relative to fragment's X.
1056
1057 partialy(x) Derivative of x relative to fragment's Y.
1058
1059 pop() Pop from stack.
1060
1061 pow(x,y) Raise x to power of y.
1062
1063 push(x) Push x on stack.
1064
1065 round(x) Round x.
1066
1067 sin(x) Sine of x.
1068
1069 sqrt(x) Square root of x.
1070
1071 trunc(x) Truncate x.
1072
1073
1074 2.2 Keywords
1075 -------------
1076
1077
1078 discard Discard fragment.
1079
1080 dst First destination register.
1081
1082 dst0 First destination register.
1083
1084 pc Program counter.
1085
1086 src First source register.
1087
1088 src0 First source register.
1089
1090 src1 Second source register.
1091
1092 src2 Third source register.
1093
1094 target Label of target instruction.
1095
1096
1097 3 Other tokens
1098 ===============
1099
1100
1101 3.1 Declaration Semantic
1102 -------------------------
1103
1104
1105 Follows Declaration token if Semantic bit is set.
1106
1107 Since its purpose is to link a shader with other stages of the pipeline,
1108 it is valid to follow only those Declaration tokens that declare a register
1109 either in INPUT or OUTPUT file.
1110
1111 SemanticName field contains the semantic name of the register being declared.
1112 There is no default value.
1113
1114 SemanticIndex is an optional subscript that can be used to distinguish
1115 different register declarations with the same semantic name. The default value
1116 is 0.
1117
1118 The meanings of the individual semantic names are explained in the following
1119 sections.
1120
1121
1122 3.1.1 FACE
1123
1124 Valid only in a fragment shader INPUT declaration.
1125
1126 FACE.x is negative when the primitive is back facing. FACE.x is positive
1127 when the primitive is front facing.