2009-12-21 07:00:40 +08:00
|
|
|
TGSI
|
|
|
|
====
|
|
|
|
|
|
|
|
TGSI, Tungsten Graphics Shader Instructions, is an intermediate language
|
|
|
|
for describing shaders. Since Gallium is inherently shaderful, shaders are
|
|
|
|
an important part of the API. TGSI is the only intermediate representation
|
|
|
|
used by all drivers.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
From GL_NV_vertex_program
|
2009-12-22 07:25:15 +08:00
|
|
|
-------------------------
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
ARL - Address Register Load
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.x = \lfloor src.x\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.y = \lfloor src.y\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.z = \lfloor src.z\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.w = \lfloor src.w\rfloor
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
MOV - Move
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = src.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src.w
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
LIT - Light Coefficients
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = 1
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.y = max(src.x, 0)
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.z = (src.x > 0) ? max(src.y, 0)^{clamp(src.w, -128, 128))} : 0
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
RCP - Reciprocal
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.x = \frac{1}{src.x}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.y = \frac{1}{src.x}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.z = \frac{1}{src.x}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.w = \frac{1}{src.x}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
RSQ - Reciprocal Square Root
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.x = \frac{1}{\sqrt{|src.x|}}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.y = \frac{1}{\sqrt{|src.x|}}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.z = \frac{1}{\sqrt{|src.x|}}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.w = \frac{1}{\sqrt{|src.x|}}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
EXP - Approximate Exponential Base 2
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
dst.x = 2^{\lfloor src.x\rfloor}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.y = src.x - \lfloor src.x\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
dst.z = 2^{src.x}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
LOG - Approximate Logarithm Base 2
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.x = \lfloor\log_2{|src.x|}\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.y = \frac{|src.x|}{2^{\lfloor\log_2{|src.x|}\rfloor}}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.z = \log_2{|src.x|}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.w = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
MUL - Multiply
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times src1.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.y \times src1.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.z \times src1.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.w \times src1.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
ADD - Add
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = src0.x + src1.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src0.y + src1.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z + src1.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src0.w + src1.w
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
DP3 - 3-component Dot Product
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
DP4 - 4-component Dot Product
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
DST - Distance Vector
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = 1
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.y \times src1.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src1.w
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
MIN - Minimum
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = min(src0.x, src1.x)
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = min(src0.y, src1.y)
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = min(src0.z, src1.z)
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = min(src0.w, src1.w)
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
MAX - Maximum
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = max(src0.x, src1.x)
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = max(src0.y, src1.y)
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = max(src0.z, src1.z)
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = max(src0.w, src1.w)
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
SLT - Set On Less Than
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src0.x < src1.x) ? 1 : 0
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.y = (src0.y < src1.y) ? 1 : 0
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.z = (src0.z < src1.z) ? 1 : 0
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = (src0.w < src1.w) ? 1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
SGE - Set On Greater Equal Than
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src0.x >= src1.x) ? 1 : 0
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.y = (src0.y >= src1.y) ? 1 : 0
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.z = (src0.z >= src1.z) ? 1 : 0
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = (src0.w >= src1.w) ? 1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
MAD - Multiply And Add
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times src1.x + src2.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.y \times src1.y + src2.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.z \times src1.z + src2.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.w \times src1.w + src2.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
SUB - Subtract
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = src0.x - src1.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src0.y - src1.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z - src1.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src0.w - src1.w
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
LRP - Linear Interpolate
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times (src1.x - src2.x) + src2.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.y \times (src1.y - src2.y) + src2.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.z \times (src1.z - src2.z) + src2.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.w \times (src1.w - src2.w) + src2.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
CND - Condition
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = (src2.x > 0.5) ? src0.x : src1.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = (src2.y > 0.5) ? src0.y : src1.y
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = (src2.z > 0.5) ? src0.z : src1.z
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = (src2.w > 0.5) ? src0.w : src1.w
|
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
DP2A - 2-component Dot Product And Add
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times src1.x + src0.y \times src1.y + src2.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.x \times src1.x + src0.y \times src1.y + src2.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.x \times src1.x + src0.y \times src1.y + src2.x
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.x \times src1.x + src0.y \times src1.y + src2.x
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
FRAC - Fraction
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.x = src.x - \lfloor src.x\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.y = src.y - \lfloor src.y\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.z = src.z - \lfloor src.z\rfloor
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.w = src.w - \lfloor src.w\rfloor
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
CLAMP - Clamp
|
|
|
|
|
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = clamp(src0.x, src1.x, src2.x)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = clamp(src0.y, src1.y, src2.y)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = clamp(src0.z, src1.z, src2.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = clamp(src0.w, src1.w, src2.w)
|
|
|
|
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
FLR - Floor
|
|
|
|
|
|
|
|
This is identical to ARL.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.x = \lfloor src.x\rfloor
|
|
|
|
|
|
|
|
dst.y = \lfloor src.y\rfloor
|
|
|
|
|
|
|
|
dst.z = \lfloor src.z\rfloor
|
|
|
|
|
|
|
|
dst.w = \lfloor src.w\rfloor
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ROUND - Round
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = round(src.x)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = round(src.y)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = round(src.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = round(src.w)
|
|
|
|
|
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
EX2 - Exponential Base 2
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
dst.x = 2^{src.x}
|
|
|
|
|
|
|
|
dst.y = 2^{src.x}
|
|
|
|
|
|
|
|
dst.z = 2^{src.x}
|
|
|
|
|
|
|
|
dst.w = 2^{src.x}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
LG2 - Logarithm Base 2
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.x = \log_2{src.x}
|
|
|
|
|
|
|
|
dst.y = \log_2{src.x}
|
|
|
|
|
|
|
|
dst.z = \log_2{src.x}
|
|
|
|
|
|
|
|
dst.w = \log_2{src.x}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
POW - Power
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
dst.x = src0.x^{src1.x}
|
|
|
|
|
|
|
|
dst.y = src0.x^{src1.x}
|
|
|
|
|
|
|
|
dst.z = src0.x^{src1.x}
|
|
|
|
|
|
|
|
dst.w = src0.x^{src1.x}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
XPD - Cross Product
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.y \times src1.z - src1.y \times src0.z
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.z \times src1.x - src1.z \times src0.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.x \times src1.y - src1.x \times src0.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
|
|
|
dst.w = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
ABS - Absolute
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.x = |src.x|
|
|
|
|
|
|
|
|
dst.y = |src.y|
|
|
|
|
|
|
|
|
dst.z = |src.z|
|
|
|
|
|
|
|
|
dst.w = |src.w|
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
RCC - Reciprocal Clamped
|
|
|
|
|
|
|
|
XXX cleanup on aisle three
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
|
|
|
|
|
|
|
|
dst.y = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
|
|
|
|
|
|
|
|
dst.z = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
|
|
|
|
|
|
|
|
dst.w = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
DPH - Homogeneous Dot Product
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
COS - Cosine
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.x = \cos{src.x}
|
|
|
|
|
|
|
|
dst.y = \cos{src.x}
|
|
|
|
|
|
|
|
dst.z = \cos{src.x}
|
|
|
|
|
|
|
|
dst.w = \cos{src.w}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
DDX - Derivative Relative To X
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = partialx(src.x)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = partialx(src.y)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = partialx(src.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = partialx(src.w)
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
DDY - Derivative Relative To Y
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = partialy(src.x)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = partialy(src.y)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = partialy(src.z)
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = partialy(src.w)
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
KILP - Predicated Discard
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
discard
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
PK2H - Pack Two 16-bit Floats
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
PK2US - Pack Two Unsigned 16-bit Scalars
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
PK4B - Pack Four Signed 8-bit Scalars
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
PK4UB - Pack Four Unsigned 8-bit Scalars
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
RFL - Reflection Vector
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = 2 \times (src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z) / (src0.x \times src0.x + src0.y \times src0.y + src0.z \times src0.z) \times src0.x - src1.x
|
|
|
|
|
|
|
|
dst.y = 2 \times (src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z) / (src0.x \times src0.x + src0.y \times src0.y + src0.z \times src0.z) \times src0.y - src1.y
|
|
|
|
|
|
|
|
dst.z = 2 \times (src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z) / (src0.x \times src0.x + src0.y \times src0.y + src0.z \times src0.z) \times src0.z - src1.z
|
|
|
|
|
|
|
|
dst.w = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:38:29 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SEQ - Set On Equal
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src0.x == src1.x) ? 1 : 0
|
|
|
|
dst.y = (src0.y == src1.y) ? 1 : 0
|
|
|
|
dst.z = (src0.z == src1.z) ? 1 : 0
|
|
|
|
dst.w = (src0.w == src1.w) ? 1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SFL - Set On False
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = 0
|
|
|
|
dst.y = 0
|
|
|
|
dst.z = 0
|
|
|
|
dst.w = 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SGT - Set On Greater Than
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src0.x > src1.x) ? 1 : 0
|
|
|
|
dst.y = (src0.y > src1.y) ? 1 : 0
|
|
|
|
dst.z = (src0.z > src1.z) ? 1 : 0
|
|
|
|
dst.w = (src0.w > src1.w) ? 1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
SIN - Sine
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.x = \sin{src.x}
|
|
|
|
|
|
|
|
dst.y = \sin{src.x}
|
|
|
|
|
|
|
|
dst.z = \sin{src.x}
|
|
|
|
|
|
|
|
dst.w = \sin{src.w}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SLE - Set On Less Equal Than
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src0.x <= src1.x) ? 1 : 0
|
|
|
|
dst.y = (src0.y <= src1.y) ? 1 : 0
|
|
|
|
dst.z = (src0.z <= src1.z) ? 1 : 0
|
|
|
|
dst.w = (src0.w <= src1.w) ? 1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SNE - Set On Not Equal
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src0.x != src1.x) ? 1 : 0
|
|
|
|
dst.y = (src0.y != src1.y) ? 1 : 0
|
|
|
|
dst.z = (src0.z != src1.z) ? 1 : 0
|
|
|
|
dst.w = (src0.w != src1.w) ? 1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
STR - Set On True
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = 1
|
|
|
|
dst.y = 1
|
|
|
|
dst.z = 1
|
|
|
|
dst.w = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TEX - Texture Lookup
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TXD - Texture Lookup with Derivatives
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TXP - Projective Texture Lookup
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
UP2H - Unpack Two 16-Bit Floats
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
UP2US - Unpack Two Unsigned 16-Bit Scalars
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
UP4B - Unpack Four Signed 8-Bit Values
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
UP4UB - Unpack Four Unsigned 8-Bit Scalars
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
X2D - 2D Coordinate Transformation
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x + src1.x \times src2.x + src1.y \times src2.y
|
|
|
|
dst.y = src0.y + src1.x \times src2.z + src1.y \times src2.w
|
|
|
|
dst.z = src0.x + src1.x \times src2.x + src1.y \times src2.y
|
|
|
|
dst.w = src0.y + src1.x \times src2.z + src1.y \times src2.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:38:29 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
GL_NV_vertex_program2
|
2009-12-22 07:25:15 +08:00
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ARA - Address Register Add
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ARR - Address Register Load With Round
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = round(src.x)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = round(src.y)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = round(src.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = round(src.w)
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
BRA - Branch
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
pc = target
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
CAL - Subroutine Call
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
push(pc)
|
|
|
|
pc = target
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
RET - Subroutine Call Return
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
pc = pop()
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Potential restrictions:
|
2009-12-22 12:07:10 +08:00
|
|
|
\times Only occurs at end of function.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SSG - Set Sign
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src.x > 0) ? 1 : (src.x < 0) ? -1 : 0
|
|
|
|
|
|
|
|
dst.y = (src.y > 0) ? 1 : (src.y < 0) ? -1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.z = (src.z > 0) ? 1 : (src.z < 0) ? -1 : 0
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = (src.w > 0) ? 1 : (src.w < 0) ? -1 : 0
|
|
|
|
|
|
|
|
|
|
|
|
CMP - Compare
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = (src0.x < 0) ? src1.x : src2.x
|
|
|
|
|
|
|
|
dst.y = (src0.y < 0) ? src1.y : src2.y
|
|
|
|
|
|
|
|
dst.z = (src0.z < 0) ? src1.z : src2.z
|
|
|
|
|
|
|
|
dst.w = (src0.w < 0) ? src1.w : src2.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
KIL - Conditional Discard
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
if (src.x < 0 || src.y < 0 || src.z < 0 || src.w < 0)
|
2009-12-22 07:25:15 +08:00
|
|
|
discard
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
SCS - Sine Cosine
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:30:29 +08:00
|
|
|
dst.x = \cos{src.x}
|
|
|
|
|
|
|
|
dst.y = \sin{src.x}
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.z = 0
|
2009-12-22 11:30:29 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.y = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TXB - Texture Lookup With Bias
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
NRM - 3-component Vector Normalise
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src.x / (src.x \times src.x + src.y \times src.y + src.z \times src.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src.y / (src.x \times src.x + src.y \times src.y + src.z \times src.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src.z / (src.x \times src.x + src.y \times src.y + src.z \times src.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
|
|
|
dst.w = 1
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
DIV - Divide
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = \frac{src0.x}{src1.x}
|
|
|
|
|
|
|
|
dst.y = \frac{src0.y}{src1.y}
|
|
|
|
|
|
|
|
dst.z = \frac{src0.z}{src1.z}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = \frac{src0.w}{src1.w}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
|
|
|
|
DP2 - 2-component Dot Product
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.x = src0.x \times src1.x + src0.y \times src1.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.y = src0.x \times src1.x + src0.y \times src1.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.z = src0.x \times src1.x + src0.y \times src1.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 12:07:10 +08:00
|
|
|
dst.w = src0.x \times src1.x + src0.y \times src1.y
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TXL - Texture Lookup With LOD
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
BRK - Break
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
IF - If
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
BGNFOR - Begin a For-Loop
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = floor(src.x)
|
|
|
|
dst.y = floor(src.y)
|
|
|
|
dst.z = floor(src.z)
|
|
|
|
|
|
|
|
if (dst.y <= 0)
|
|
|
|
pc = [matching ENDFOR] + 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
Note: The destination must be a loop register.
|
|
|
|
The source must be a constant register.
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for cleanup / removal.
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
REP - Repeat
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ELSE - Else
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ENDIF - End If
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ENDFOR - End a For-Loop
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.x = dst.x + dst.z
|
|
|
|
dst.y = dst.y - 1.0
|
|
|
|
|
|
|
|
if (dst.y > 0)
|
|
|
|
pc = [matching BGNFOR instruction] + 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
Note: The destination must be a loop register.
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for cleanup / removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ENDREP - End Repeat
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
PUSHA - Push Address Register On Stack
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
push(src.x)
|
|
|
|
push(src.y)
|
|
|
|
push(src.z)
|
|
|
|
push(src.w)
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for cleanup / removal.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
POPA - Pop Address Register From Stack
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
dst.w = pop()
|
|
|
|
dst.z = pop()
|
|
|
|
dst.y = pop()
|
|
|
|
dst.x = pop()
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Considered for cleanup / removal.
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
GL_NV_gpu_program4
|
2009-12-22 07:25:15 +08:00
|
|
|
------------------------
|
|
|
|
|
2009-12-22 07:38:29 +08:00
|
|
|
Support for these opcodes indicated by a special pipe capability bit (TBD).
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
CEIL - Ceiling
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.x = \lceil src.x\rceil
|
|
|
|
|
|
|
|
dst.y = \lceil src.y\rceil
|
|
|
|
|
|
|
|
dst.z = \lceil src.z\rceil
|
|
|
|
|
|
|
|
dst.w = \lceil src.w\rceil
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
I2F - Integer To Float
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = (float) src.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = (float) src.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = (float) src.z
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = (float) src.w
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
NOT - Bitwise Not
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = ~src.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = ~src.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = ~src.z
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = ~src.w
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TRUNC - Truncate
|
|
|
|
|
|
|
|
XXX how is this different from floor?
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = trunc(src.x)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = trunc(src.y)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = trunc(src.z)
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = trunc(src.w)
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SHL - Shift Left
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = src0.x << src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src0.y << src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z << src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src0.w << src1.x
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
SHR - Shift Right
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = src0.x >> src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src0.y >> src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z >> src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src0.w >> src1.x
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
AND - Bitwise And
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = src0.x & src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src0.y & src1.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z & src1.z
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src0.w & src1.w
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
OR - Bitwise Or
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = src0.x | src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src0.y | src1.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z | src1.z
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src0.w | src1.w
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
MOD - Modulus
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = src0.x \bmod src1.x
|
|
|
|
|
|
|
|
dst.y = src0.y \bmod src1.y
|
|
|
|
|
|
|
|
dst.z = src0.z \bmod src1.z
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = src0.w \bmod src1.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
|
|
|
|
XOR - Bitwise Xor
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.x = src0.x ^ src1.x
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.y = src0.y ^ src1.y
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.z = src0.z ^ src1.z
|
2009-12-22 12:32:46 +08:00
|
|
|
|
2009-12-22 07:25:15 +08:00
|
|
|
dst.w = src0.w ^ src1.w
|
|
|
|
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
SAD - Sum Of Absolute Differences
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:12:55 +08:00
|
|
|
.. math::
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
dst.x = |src0.x - src1.x| + src2.x
|
|
|
|
|
|
|
|
dst.y = |src0.y - src1.y| + src2.y
|
|
|
|
|
|
|
|
dst.z = |src0.z - src1.z| + src2.z
|
|
|
|
|
|
|
|
dst.w = |src0.w - src1.w| + src2.w
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TXF - Texel Fetch
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
TXQ - Texture Size Query
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
CONT - Continue
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
GL_NV_geometry_program4
|
2009-12-22 07:25:15 +08:00
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
EMIT - Emit
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ENDPRIM - End Primitive
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
GLSL
|
2009-12-22 07:25:15 +08:00
|
|
|
----------
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
BGNLOOP - Begin a Loop
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
BGNSUB - Begin Subroutine
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ENDLOOP - End a Loop
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ENDSUB - End Subroutine
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
NOP - No Operation
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
Do nothing.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
NRM4 - 4-component Vector Normalise
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
.. math::
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.x = \frac{src.x}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.y = \frac{src.y}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
|
|
|
|
|
|
|
|
dst.z = \frac{src.z}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
|
2009-12-22 11:12:55 +08:00
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
dst.w = \frac{src.w}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
ps_2_x
|
2009-12-22 07:25:15 +08:00
|
|
|
------------
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
CALLNZ - Subroutine Call If Not Zero
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
IFC - If
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
BREAKC - Break Conditional
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
TBD
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
Explanation of symbols used
|
2009-12-22 07:25:15 +08:00
|
|
|
==============================
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
Functions
|
2009-12-22 07:25:15 +08:00
|
|
|
--------------
|
|
|
|
|
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
:math:`|x|` Absolute value of `x`.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
:math:`\lceil x \rceil` Ceiling of `x`.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
clamp(x,y,z) Clamp x between y and z.
|
|
|
|
(x < y) ? y : (x > z) ? z : x
|
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
:math:`\lfloor x\rfloor` Floor of `x`.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
2009-12-22 11:57:56 +08:00
|
|
|
:math:`\log_2{x}` Logarithm of `x`, base 2.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
max(x,y) Maximum of x and y.
|
|
|
|
(x > y) ? x : y
|
|
|
|
|
|
|
|
min(x,y) Minimum of x and y.
|
|
|
|
(x < y) ? x : y
|
|
|
|
|
|
|
|
partialx(x) Derivative of x relative to fragment's X.
|
|
|
|
|
|
|
|
partialy(x) Derivative of x relative to fragment's Y.
|
|
|
|
|
|
|
|
pop() Pop from stack.
|
|
|
|
|
2009-12-22 11:41:09 +08:00
|
|
|
:math:`x^y` `x` to the power `y`.
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
push(x) Push x on stack.
|
|
|
|
|
|
|
|
round(x) Round x.
|
|
|
|
|
|
|
|
trunc(x) Truncate x.
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
Keywords
|
2009-12-22 07:25:15 +08:00
|
|
|
-------------
|
|
|
|
|
|
|
|
|
|
|
|
discard Discard fragment.
|
|
|
|
|
|
|
|
dst First destination register.
|
|
|
|
|
|
|
|
dst0 First destination register.
|
|
|
|
|
|
|
|
pc Program counter.
|
|
|
|
|
|
|
|
src First source register.
|
|
|
|
|
|
|
|
src0 First source register.
|
|
|
|
|
|
|
|
src1 Second source register.
|
|
|
|
|
|
|
|
src2 Third source register.
|
|
|
|
|
|
|
|
target Label of target instruction.
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
Other tokens
|
2009-12-22 07:25:15 +08:00
|
|
|
===============
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
Declaration Semantic
|
2009-12-22 07:25:15 +08:00
|
|
|
-------------------------
|
|
|
|
|
|
|
|
|
|
|
|
Follows Declaration token if Semantic bit is set.
|
|
|
|
|
|
|
|
Since its purpose is to link a shader with other stages of the pipeline,
|
|
|
|
it is valid to follow only those Declaration tokens that declare a register
|
|
|
|
either in INPUT or OUTPUT file.
|
|
|
|
|
|
|
|
SemanticName field contains the semantic name of the register being declared.
|
|
|
|
There is no default value.
|
|
|
|
|
|
|
|
SemanticIndex is an optional subscript that can be used to distinguish
|
|
|
|
different register declarations with the same semantic name. The default value
|
|
|
|
is 0.
|
|
|
|
|
|
|
|
The meanings of the individual semantic names are explained in the following
|
|
|
|
sections.
|
|
|
|
|
|
|
|
|
2009-12-22 12:32:46 +08:00
|
|
|
FACE
|
|
|
|
^^^^
|
2009-12-22 07:25:15 +08:00
|
|
|
|
|
|
|
Valid only in a fragment shader INPUT declaration.
|
|
|
|
|
|
|
|
FACE.x is negative when the primitive is back facing. FACE.x is positive
|
|
|
|
when the primitive is front facing.
|