~ubuntu-branches/ubuntu/natty/mesa/natty-proposed

« back to all changes in this revision

Viewing changes to src/gallium/auxiliary/tgsi/tgsi-instruction-set.txt

  • Committer: Bazaar Package Importer
  • Author(s): Robert Hooker, Robert Hooker, Christopher James Halse Rogers
  • Date: 2010-09-14 08:55:40 UTC
  • mfrom: (1.2.28 upstream)
  • Revision ID: james.westby@ubuntu.com-20100914085540-m4fpl0hdjlfd4jgz
Tags: 7.9~git20100909-0ubuntu1
[ Robert Hooker ]
* New upstream git snapshot up to commit 94118fe2d4b1e5 (LP: #631413)
* New features include ATI HD5xxx series support in r600, and a vastly
  improved glsl compiler.
* Remove pre-generated .pc's, use the ones generated at build time
  instead.
* Remove all references to mesa-utils now that its no longer shipped
  with the mesa source.
* Disable the experimental ARB_fragment_shader option by default on
  i915, it exposes incomplete functionality that breaks KDE compositing
  among other things. It can be enabled via driconf still. (LP: #628930).

[ Christopher James Halse Rogers ]
* debian/patches/04_osmesa_version.diff:
  - Refresh for new upstream
* Bugs fixed in this release:
  - Fixes severe rendering corruption in Unity on radeon (LP: #628727,
    LP: #596292, LP: #599741, LP: #630315, LP: #613694, LP: #599741).
  - Also fixes rendering in gnome-shell (LP: #578619).
  - Flickering in OpenGL apps on radeon (LP: #626943, LP: #610541).
  - Provides preliminary support for new intel chips (LP: #601052).
* debian/rules:
  - Update configure flags to match upstream reshuffling.
  - Explicitly remove gallium DRI drivers that we don't want to ship.
* Update debian/gbp.conf for this Maverick-specific packaging
* libegl1-mesa-dri-x11,kms: There are no longer separate kms or x11 drivers
  for EGL, libegl1-mesa-drivers now contains a single driver that provides
  both backends.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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.