xref: /aosp_15_r20/external/mesa3d/docs/gallium/tgsi.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard WorkerTGSI
2*61046927SAndroid Build Coastguard Worker====
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard WorkerTGSI, Tungsten Graphics Shader Infrastructure, is an intermediate language
5*61046927SAndroid Build Coastguard Workerfor describing shaders. Since Gallium is inherently shaderful, shaders are
6*61046927SAndroid Build Coastguard Workeran important part of the API. TGSI is the only intermediate representation
7*61046927SAndroid Build Coastguard Workerused by all drivers.
8*61046927SAndroid Build Coastguard Worker
9*61046927SAndroid Build Coastguard WorkerBasics
10*61046927SAndroid Build Coastguard Worker------
11*61046927SAndroid Build Coastguard Worker
12*61046927SAndroid Build Coastguard WorkerAll TGSI instructions, known as *opcodes*, operate on arbitrary-precision
13*61046927SAndroid Build Coastguard Workerfloating-point four-component vectors. An opcode may have up to one
14*61046927SAndroid Build Coastguard Workerdestination register, known as *dst*, and between zero and three source
15*61046927SAndroid Build Coastguard Workerregisters, called *src0* through *src2*, or simply *src* if there is only
16*61046927SAndroid Build Coastguard Workerone.
17*61046927SAndroid Build Coastguard Worker
18*61046927SAndroid Build Coastguard WorkerSome instructions, like :opcode:`I2F`, permit re-interpretation of vector
19*61046927SAndroid Build Coastguard Workercomponents as integers. Other instructions permit using registers as
20*61046927SAndroid Build Coastguard Workertwo-component vectors with double precision; see :ref:`doubleopcodes`.
21*61046927SAndroid Build Coastguard Worker
22*61046927SAndroid Build Coastguard WorkerWhen an instruction has a scalar result, the result is usually copied into
23*61046927SAndroid Build Coastguard Workereach of the components of *dst*. When this happens, the result is said to be
24*61046927SAndroid Build Coastguard Worker*replicated* to *dst*. :opcode:`RCP` is one such instruction.
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard WorkerSource Modifiers
27*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard WorkerTGSI supports 32-bit negate and absolute value modifiers on floating-point
30*61046927SAndroid Build Coastguard Workerinputs, and 32-bit integer negates on some drivers.  The negate applies after
31*61046927SAndroid Build Coastguard Workerabsolute value if both are present.
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard WorkerThe type of an input can be found by ``tgsi_opcode_infer_src_type()``, and
34*61046927SAndroid Build Coastguard WorkerTGSI_OPCODE_MOV and the second and third operands of TGSI_OPCODE_UCMP (which
35*61046927SAndroid Build Coastguard Workerreturn TGSI_TYPE_UNTYPED) are also considered floats for the purpose of source
36*61046927SAndroid Build Coastguard Workermodifiers.
37*61046927SAndroid Build Coastguard Worker
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard WorkerOther Modifiers
40*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^
41*61046927SAndroid Build Coastguard Worker
42*61046927SAndroid Build Coastguard WorkerThe saturate modifier clamps 32-bit destination stores to [0.0, 1.0].
43*61046927SAndroid Build Coastguard Worker
44*61046927SAndroid Build Coastguard WorkerFor arithmetic instruction having a precise modifier certain optimizations
45*61046927SAndroid Build Coastguard Workerwhich may alter the result are disallowed. Example: *add(mul(a,b),c)* can't be
46*61046927SAndroid Build Coastguard Workeroptimized to TGSI_OPCODE_MAD, because some hardware only supports the fused
47*61046927SAndroid Build Coastguard WorkerMAD instruction.
48*61046927SAndroid Build Coastguard Worker
49*61046927SAndroid Build Coastguard WorkerInstruction Set
50*61046927SAndroid Build Coastguard Worker---------------
51*61046927SAndroid Build Coastguard Worker
52*61046927SAndroid Build Coastguard WorkerCore ISA
53*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^
54*61046927SAndroid Build Coastguard Worker
55*61046927SAndroid Build Coastguard WorkerThese opcodes are guaranteed to be available regardless of the driver being
56*61046927SAndroid Build Coastguard Workerused.
57*61046927SAndroid Build Coastguard Worker
58*61046927SAndroid Build Coastguard Worker.. opcode:: ARL - Address Register Load
59*61046927SAndroid Build Coastguard Worker
60*61046927SAndroid Build Coastguard Worker   .. math::
61*61046927SAndroid Build Coastguard Worker
62*61046927SAndroid Build Coastguard Worker      dst.x = (int) \lfloor src.x\rfloor
63*61046927SAndroid Build Coastguard Worker
64*61046927SAndroid Build Coastguard Worker      dst.y = (int) \lfloor src.y\rfloor
65*61046927SAndroid Build Coastguard Worker
66*61046927SAndroid Build Coastguard Worker      dst.z = (int) \lfloor src.z\rfloor
67*61046927SAndroid Build Coastguard Worker
68*61046927SAndroid Build Coastguard Worker      dst.w = (int) \lfloor src.w\rfloor
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker
71*61046927SAndroid Build Coastguard Worker.. opcode:: MOV - Move
72*61046927SAndroid Build Coastguard Worker
73*61046927SAndroid Build Coastguard Worker   .. math::
74*61046927SAndroid Build Coastguard Worker
75*61046927SAndroid Build Coastguard Worker      dst.x = src.x
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Worker      dst.y = src.y
78*61046927SAndroid Build Coastguard Worker
79*61046927SAndroid Build Coastguard Worker      dst.z = src.z
80*61046927SAndroid Build Coastguard Worker
81*61046927SAndroid Build Coastguard Worker      dst.w = src.w
82*61046927SAndroid Build Coastguard Worker
83*61046927SAndroid Build Coastguard Worker
84*61046927SAndroid Build Coastguard Worker.. opcode:: LIT - Light Coefficients
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker   .. math::
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard Worker      dst.x = 1
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker      dst.y = max(src.x, 0)
91*61046927SAndroid Build Coastguard Worker
92*61046927SAndroid Build Coastguard Worker      dst.z =
93*61046927SAndroid Build Coastguard Worker      \left\{
94*61046927SAndroid Build Coastguard Worker      \begin{array}{ c l }
95*61046927SAndroid Build Coastguard Worker         max(src.y, 0)^{clamp(src.w, -128, 128)} & \quad \textrm{if } src.x \gt 0 \\
96*61046927SAndroid Build Coastguard Worker         0                                       & \quad \textrm{otherwise}
97*61046927SAndroid Build Coastguard Worker      \end{array}
98*61046927SAndroid Build Coastguard Worker      \right.
99*61046927SAndroid Build Coastguard Worker
100*61046927SAndroid Build Coastguard Worker      dst.w = 1
101*61046927SAndroid Build Coastguard Worker
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard Worker.. opcode:: RCP - Reciprocal
104*61046927SAndroid Build Coastguard Worker
105*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
106*61046927SAndroid Build Coastguard Worker
107*61046927SAndroid Build Coastguard Worker   .. math::
108*61046927SAndroid Build Coastguard Worker
109*61046927SAndroid Build Coastguard Worker      dst = \frac{1}{src.x}
110*61046927SAndroid Build Coastguard Worker
111*61046927SAndroid Build Coastguard Worker
112*61046927SAndroid Build Coastguard Worker.. opcode:: RSQ - Reciprocal Square Root
113*61046927SAndroid Build Coastguard Worker
114*61046927SAndroid Build Coastguard Worker   This instruction replicates its result. The results are undefined for *src* <= 0.
115*61046927SAndroid Build Coastguard Worker
116*61046927SAndroid Build Coastguard Worker   .. math::
117*61046927SAndroid Build Coastguard Worker
118*61046927SAndroid Build Coastguard Worker      dst = \frac{1}{\sqrt{src.x}}
119*61046927SAndroid Build Coastguard Worker
120*61046927SAndroid Build Coastguard Worker
121*61046927SAndroid Build Coastguard Worker.. opcode:: SQRT - Square Root
122*61046927SAndroid Build Coastguard Worker
123*61046927SAndroid Build Coastguard Worker   This instruction replicates its result. The results are undefined for *src* < 0.
124*61046927SAndroid Build Coastguard Worker
125*61046927SAndroid Build Coastguard Worker   .. math::
126*61046927SAndroid Build Coastguard Worker
127*61046927SAndroid Build Coastguard Worker      dst = {\sqrt{src.x}}
128*61046927SAndroid Build Coastguard Worker
129*61046927SAndroid Build Coastguard Worker
130*61046927SAndroid Build Coastguard Worker.. opcode:: EXP - Approximate Exponential Base 2
131*61046927SAndroid Build Coastguard Worker
132*61046927SAndroid Build Coastguard Worker   .. math::
133*61046927SAndroid Build Coastguard Worker
134*61046927SAndroid Build Coastguard Worker      dst.x &= 2^{\lfloor src.x\rfloor} \\
135*61046927SAndroid Build Coastguard Worker      dst.y &= src.x - \lfloor src.x\rfloor \\
136*61046927SAndroid Build Coastguard Worker      dst.z &= 2^{src.x} \\
137*61046927SAndroid Build Coastguard Worker      dst.w &= 1
138*61046927SAndroid Build Coastguard Worker
139*61046927SAndroid Build Coastguard Worker
140*61046927SAndroid Build Coastguard Worker.. opcode:: LOG - Approximate Logarithm Base 2
141*61046927SAndroid Build Coastguard Worker
142*61046927SAndroid Build Coastguard Worker   .. math::
143*61046927SAndroid Build Coastguard Worker
144*61046927SAndroid Build Coastguard Worker      dst.x &= \lfloor\log_2{|src.x|}\rfloor \\
145*61046927SAndroid Build Coastguard Worker      dst.y &= \frac{|src.x|}{2^{\lfloor\log_2{|src.x|}\rfloor}} \\
146*61046927SAndroid Build Coastguard Worker      dst.z &= \log_2{|src.x|} \\
147*61046927SAndroid Build Coastguard Worker      dst.w &= 1
148*61046927SAndroid Build Coastguard Worker
149*61046927SAndroid Build Coastguard Worker
150*61046927SAndroid Build Coastguard Worker.. opcode:: MUL - Multiply
151*61046927SAndroid Build Coastguard Worker
152*61046927SAndroid Build Coastguard Worker   .. math::
153*61046927SAndroid Build Coastguard Worker
154*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \times src1.x
155*61046927SAndroid Build Coastguard Worker
156*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \times src1.y
157*61046927SAndroid Build Coastguard Worker
158*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \times src1.z
159*61046927SAndroid Build Coastguard Worker
160*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \times src1.w
161*61046927SAndroid Build Coastguard Worker
162*61046927SAndroid Build Coastguard Worker
163*61046927SAndroid Build Coastguard Worker.. opcode:: ADD - Add
164*61046927SAndroid Build Coastguard Worker
165*61046927SAndroid Build Coastguard Worker   .. math::
166*61046927SAndroid Build Coastguard Worker
167*61046927SAndroid Build Coastguard Worker      dst.x = src0.x + src1.x
168*61046927SAndroid Build Coastguard Worker
169*61046927SAndroid Build Coastguard Worker      dst.y = src0.y + src1.y
170*61046927SAndroid Build Coastguard Worker
171*61046927SAndroid Build Coastguard Worker      dst.z = src0.z + src1.z
172*61046927SAndroid Build Coastguard Worker
173*61046927SAndroid Build Coastguard Worker      dst.w = src0.w + src1.w
174*61046927SAndroid Build Coastguard Worker
175*61046927SAndroid Build Coastguard Worker
176*61046927SAndroid Build Coastguard Worker.. opcode:: DP3 - 3-component Dot Product
177*61046927SAndroid Build Coastguard Worker
178*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
179*61046927SAndroid Build Coastguard Worker
180*61046927SAndroid Build Coastguard Worker   .. math::
181*61046927SAndroid Build Coastguard Worker
182*61046927SAndroid Build Coastguard Worker      \begin{aligned}
183*61046927SAndroid Build Coastguard Worker      dst = & src0.x \times src1.x +\\
184*61046927SAndroid Build Coastguard Worker            & src0.y \times src1.y +\\
185*61046927SAndroid Build Coastguard Worker            & src0.z \times src1.z
186*61046927SAndroid Build Coastguard Worker      \end{aligned}
187*61046927SAndroid Build Coastguard Worker
188*61046927SAndroid Build Coastguard Worker
189*61046927SAndroid Build Coastguard Worker.. opcode:: DP4 - 4-component Dot Product
190*61046927SAndroid Build Coastguard Worker
191*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
192*61046927SAndroid Build Coastguard Worker
193*61046927SAndroid Build Coastguard Worker   .. math::
194*61046927SAndroid Build Coastguard Worker
195*61046927SAndroid Build Coastguard Worker      \begin{aligned}
196*61046927SAndroid Build Coastguard Worker      dst = & src0.x \times src1.x +\\
197*61046927SAndroid Build Coastguard Worker            & src0.y \times src1.y +\\
198*61046927SAndroid Build Coastguard Worker            & src0.z \times src1.z +\\
199*61046927SAndroid Build Coastguard Worker            & src0.w \times src1.w
200*61046927SAndroid Build Coastguard Worker      \end{aligned}
201*61046927SAndroid Build Coastguard Worker
202*61046927SAndroid Build Coastguard Worker
203*61046927SAndroid Build Coastguard Worker.. opcode:: DST - Distance Vector
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker   .. math::
206*61046927SAndroid Build Coastguard Worker
207*61046927SAndroid Build Coastguard Worker      dst.x &= 1\\
208*61046927SAndroid Build Coastguard Worker      dst.y &= src0.y \times src1.y\\
209*61046927SAndroid Build Coastguard Worker      dst.z &= src0.z\\
210*61046927SAndroid Build Coastguard Worker      dst.w &= src1.w
211*61046927SAndroid Build Coastguard Worker
212*61046927SAndroid Build Coastguard Worker
213*61046927SAndroid Build Coastguard Worker.. opcode:: MIN - Minimum
214*61046927SAndroid Build Coastguard Worker
215*61046927SAndroid Build Coastguard Worker   .. math::
216*61046927SAndroid Build Coastguard Worker
217*61046927SAndroid Build Coastguard Worker      dst.x = min(src0.x, src1.x)
218*61046927SAndroid Build Coastguard Worker
219*61046927SAndroid Build Coastguard Worker      dst.y = min(src0.y, src1.y)
220*61046927SAndroid Build Coastguard Worker
221*61046927SAndroid Build Coastguard Worker      dst.z = min(src0.z, src1.z)
222*61046927SAndroid Build Coastguard Worker
223*61046927SAndroid Build Coastguard Worker      dst.w = min(src0.w, src1.w)
224*61046927SAndroid Build Coastguard Worker
225*61046927SAndroid Build Coastguard Worker
226*61046927SAndroid Build Coastguard Worker.. opcode:: MAX - Maximum
227*61046927SAndroid Build Coastguard Worker
228*61046927SAndroid Build Coastguard Worker   .. math::
229*61046927SAndroid Build Coastguard Worker
230*61046927SAndroid Build Coastguard Worker      dst.x = max(src0.x, src1.x)
231*61046927SAndroid Build Coastguard Worker
232*61046927SAndroid Build Coastguard Worker      dst.y = max(src0.y, src1.y)
233*61046927SAndroid Build Coastguard Worker
234*61046927SAndroid Build Coastguard Worker      dst.z = max(src0.z, src1.z)
235*61046927SAndroid Build Coastguard Worker
236*61046927SAndroid Build Coastguard Worker      dst.w = max(src0.w, src1.w)
237*61046927SAndroid Build Coastguard Worker
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker.. opcode:: SLT - Set On Less Than
240*61046927SAndroid Build Coastguard Worker
241*61046927SAndroid Build Coastguard Worker   .. math::
242*61046927SAndroid Build Coastguard Worker
243*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x < src1.x) ? 1.0F : 0.0F
244*61046927SAndroid Build Coastguard Worker
245*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y < src1.y) ? 1.0F : 0.0F
246*61046927SAndroid Build Coastguard Worker
247*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z < src1.z) ? 1.0F : 0.0F
248*61046927SAndroid Build Coastguard Worker
249*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w < src1.w) ? 1.0F : 0.0F
250*61046927SAndroid Build Coastguard Worker
251*61046927SAndroid Build Coastguard Worker
252*61046927SAndroid Build Coastguard Worker.. opcode:: SGE - Set On Greater Equal Than
253*61046927SAndroid Build Coastguard Worker
254*61046927SAndroid Build Coastguard Worker   .. math::
255*61046927SAndroid Build Coastguard Worker
256*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x >= src1.x) ? 1.0F : 0.0F
257*61046927SAndroid Build Coastguard Worker
258*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y >= src1.y) ? 1.0F : 0.0F
259*61046927SAndroid Build Coastguard Worker
260*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z >= src1.z) ? 1.0F : 0.0F
261*61046927SAndroid Build Coastguard Worker
262*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w >= src1.w) ? 1.0F : 0.0F
263*61046927SAndroid Build Coastguard Worker
264*61046927SAndroid Build Coastguard Worker
265*61046927SAndroid Build Coastguard Worker.. opcode:: MAD - Multiply And Add
266*61046927SAndroid Build Coastguard Worker
267*61046927SAndroid Build Coastguard Worker   Perform a * b + c. The implementation is free to decide whether there is an
268*61046927SAndroid Build Coastguard Worker   intermediate rounding step or not.
269*61046927SAndroid Build Coastguard Worker
270*61046927SAndroid Build Coastguard Worker   .. math::
271*61046927SAndroid Build Coastguard Worker
272*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \times src1.x + src2.x
273*61046927SAndroid Build Coastguard Worker
274*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \times src1.y + src2.y
275*61046927SAndroid Build Coastguard Worker
276*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \times src1.z + src2.z
277*61046927SAndroid Build Coastguard Worker
278*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \times src1.w + src2.w
279*61046927SAndroid Build Coastguard Worker
280*61046927SAndroid Build Coastguard Worker
281*61046927SAndroid Build Coastguard Worker.. opcode:: LRP - Linear Interpolate
282*61046927SAndroid Build Coastguard Worker
283*61046927SAndroid Build Coastguard Worker   .. math::
284*61046927SAndroid Build Coastguard Worker
285*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \times src1.x + (1 - src0.x) \times src2.x
286*61046927SAndroid Build Coastguard Worker
287*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \times src1.y + (1 - src0.y) \times src2.y
288*61046927SAndroid Build Coastguard Worker
289*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \times src1.z + (1 - src0.z) \times src2.z
290*61046927SAndroid Build Coastguard Worker
291*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \times src1.w + (1 - src0.w) \times src2.w
292*61046927SAndroid Build Coastguard Worker
293*61046927SAndroid Build Coastguard Worker
294*61046927SAndroid Build Coastguard Worker.. opcode:: FMA - Fused Multiply-Add
295*61046927SAndroid Build Coastguard Worker
296*61046927SAndroid Build Coastguard Worker   Perform a * b + c with no intermediate rounding step.
297*61046927SAndroid Build Coastguard Worker
298*61046927SAndroid Build Coastguard Worker   .. math::
299*61046927SAndroid Build Coastguard Worker
300*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \times src1.x + src2.x
301*61046927SAndroid Build Coastguard Worker
302*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \times src1.y + src2.y
303*61046927SAndroid Build Coastguard Worker
304*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \times src1.z + src2.z
305*61046927SAndroid Build Coastguard Worker
306*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \times src1.w + src2.w
307*61046927SAndroid Build Coastguard Worker
308*61046927SAndroid Build Coastguard Worker
309*61046927SAndroid Build Coastguard Worker.. opcode:: FRC - Fraction
310*61046927SAndroid Build Coastguard Worker
311*61046927SAndroid Build Coastguard Worker   .. math::
312*61046927SAndroid Build Coastguard Worker
313*61046927SAndroid Build Coastguard Worker      dst.x = src.x - \lfloor src.x\rfloor
314*61046927SAndroid Build Coastguard Worker
315*61046927SAndroid Build Coastguard Worker      dst.y = src.y - \lfloor src.y\rfloor
316*61046927SAndroid Build Coastguard Worker
317*61046927SAndroid Build Coastguard Worker      dst.z = src.z - \lfloor src.z\rfloor
318*61046927SAndroid Build Coastguard Worker
319*61046927SAndroid Build Coastguard Worker      dst.w = src.w - \lfloor src.w\rfloor
320*61046927SAndroid Build Coastguard Worker
321*61046927SAndroid Build Coastguard Worker
322*61046927SAndroid Build Coastguard Worker.. opcode:: FLR - Floor
323*61046927SAndroid Build Coastguard Worker
324*61046927SAndroid Build Coastguard Worker   .. math::
325*61046927SAndroid Build Coastguard Worker
326*61046927SAndroid Build Coastguard Worker      dst.x = \lfloor src.x\rfloor
327*61046927SAndroid Build Coastguard Worker
328*61046927SAndroid Build Coastguard Worker      dst.y = \lfloor src.y\rfloor
329*61046927SAndroid Build Coastguard Worker
330*61046927SAndroid Build Coastguard Worker      dst.z = \lfloor src.z\rfloor
331*61046927SAndroid Build Coastguard Worker
332*61046927SAndroid Build Coastguard Worker      dst.w = \lfloor src.w\rfloor
333*61046927SAndroid Build Coastguard Worker
334*61046927SAndroid Build Coastguard Worker
335*61046927SAndroid Build Coastguard Worker.. opcode:: ROUND - Round
336*61046927SAndroid Build Coastguard Worker
337*61046927SAndroid Build Coastguard Worker   .. math::
338*61046927SAndroid Build Coastguard Worker
339*61046927SAndroid Build Coastguard Worker      dst.x = round(src.x)
340*61046927SAndroid Build Coastguard Worker
341*61046927SAndroid Build Coastguard Worker      dst.y = round(src.y)
342*61046927SAndroid Build Coastguard Worker
343*61046927SAndroid Build Coastguard Worker      dst.z = round(src.z)
344*61046927SAndroid Build Coastguard Worker
345*61046927SAndroid Build Coastguard Worker      dst.w = round(src.w)
346*61046927SAndroid Build Coastguard Worker
347*61046927SAndroid Build Coastguard Worker
348*61046927SAndroid Build Coastguard Worker.. opcode:: EX2 - Exponential Base 2
349*61046927SAndroid Build Coastguard Worker
350*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
351*61046927SAndroid Build Coastguard Worker
352*61046927SAndroid Build Coastguard Worker   .. math::
353*61046927SAndroid Build Coastguard Worker
354*61046927SAndroid Build Coastguard Worker      dst = 2^{src.x}
355*61046927SAndroid Build Coastguard Worker
356*61046927SAndroid Build Coastguard Worker
357*61046927SAndroid Build Coastguard Worker.. opcode:: LG2 - Logarithm Base 2
358*61046927SAndroid Build Coastguard Worker
359*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
360*61046927SAndroid Build Coastguard Worker
361*61046927SAndroid Build Coastguard Worker   .. math::
362*61046927SAndroid Build Coastguard Worker
363*61046927SAndroid Build Coastguard Worker      dst = \log_2{src.x}
364*61046927SAndroid Build Coastguard Worker
365*61046927SAndroid Build Coastguard Worker
366*61046927SAndroid Build Coastguard Worker.. opcode:: POW - Power
367*61046927SAndroid Build Coastguard Worker
368*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
369*61046927SAndroid Build Coastguard Worker
370*61046927SAndroid Build Coastguard Worker   .. math::
371*61046927SAndroid Build Coastguard Worker
372*61046927SAndroid Build Coastguard Worker      dst = src0.x^{src1.x}
373*61046927SAndroid Build Coastguard Worker
374*61046927SAndroid Build Coastguard Worker
375*61046927SAndroid Build Coastguard Worker.. opcode:: LDEXP - Multiply Number by Integral Power of 2
376*61046927SAndroid Build Coastguard Worker
377*61046927SAndroid Build Coastguard Worker   *src1* is an integer.
378*61046927SAndroid Build Coastguard Worker
379*61046927SAndroid Build Coastguard Worker   .. math::
380*61046927SAndroid Build Coastguard Worker
381*61046927SAndroid Build Coastguard Worker      dst.x = src0.x * 2^{src1.x}
382*61046927SAndroid Build Coastguard Worker
383*61046927SAndroid Build Coastguard Worker      dst.y = src0.y * 2^{src1.y}
384*61046927SAndroid Build Coastguard Worker
385*61046927SAndroid Build Coastguard Worker      dst.z = src0.z * 2^{src1.z}
386*61046927SAndroid Build Coastguard Worker
387*61046927SAndroid Build Coastguard Worker      dst.w = src0.w * 2^{src1.w}
388*61046927SAndroid Build Coastguard Worker
389*61046927SAndroid Build Coastguard Worker
390*61046927SAndroid Build Coastguard Worker.. opcode:: COS - Cosine
391*61046927SAndroid Build Coastguard Worker
392*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
393*61046927SAndroid Build Coastguard Worker
394*61046927SAndroid Build Coastguard Worker   .. math::
395*61046927SAndroid Build Coastguard Worker
396*61046927SAndroid Build Coastguard Worker      dst = \cos{src.x}
397*61046927SAndroid Build Coastguard Worker
398*61046927SAndroid Build Coastguard Worker
399*61046927SAndroid Build Coastguard Worker.. opcode:: DDX, DDX_FINE - Derivative Relative To X
400*61046927SAndroid Build Coastguard Worker
401*61046927SAndroid Build Coastguard Worker   The fine variant is only used when ``PIPE_CAP_FS_FINE_DERIVATIVE`` is
402*61046927SAndroid Build Coastguard Worker   advertised. When it is, the fine version guarantees one derivative per
403*61046927SAndroid Build Coastguard Worker   row while DDX is allowed to be the same for the entire 2x2 quad.
404*61046927SAndroid Build Coastguard Worker
405*61046927SAndroid Build Coastguard Worker   .. math::
406*61046927SAndroid Build Coastguard Worker
407*61046927SAndroid Build Coastguard Worker      dst.x = partialx(src.x)
408*61046927SAndroid Build Coastguard Worker
409*61046927SAndroid Build Coastguard Worker      dst.y = partialx(src.y)
410*61046927SAndroid Build Coastguard Worker
411*61046927SAndroid Build Coastguard Worker      dst.z = partialx(src.z)
412*61046927SAndroid Build Coastguard Worker
413*61046927SAndroid Build Coastguard Worker      dst.w = partialx(src.w)
414*61046927SAndroid Build Coastguard Worker
415*61046927SAndroid Build Coastguard Worker
416*61046927SAndroid Build Coastguard Worker.. opcode:: DDY, DDY_FINE - Derivative Relative To Y
417*61046927SAndroid Build Coastguard Worker
418*61046927SAndroid Build Coastguard Worker   The fine variant is only used when ``PIPE_CAP_FS_FINE_DERIVATIVE`` is
419*61046927SAndroid Build Coastguard Worker   advertised. When it is, the fine version guarantees one derivative per
420*61046927SAndroid Build Coastguard Worker   column while DDY is allowed to be the same for the entire 2x2 quad.
421*61046927SAndroid Build Coastguard Worker
422*61046927SAndroid Build Coastguard Worker   .. math::
423*61046927SAndroid Build Coastguard Worker
424*61046927SAndroid Build Coastguard Worker      dst.x = partialy(src.x)
425*61046927SAndroid Build Coastguard Worker
426*61046927SAndroid Build Coastguard Worker      dst.y = partialy(src.y)
427*61046927SAndroid Build Coastguard Worker
428*61046927SAndroid Build Coastguard Worker      dst.z = partialy(src.z)
429*61046927SAndroid Build Coastguard Worker
430*61046927SAndroid Build Coastguard Worker      dst.w = partialy(src.w)
431*61046927SAndroid Build Coastguard Worker
432*61046927SAndroid Build Coastguard Worker
433*61046927SAndroid Build Coastguard Worker.. opcode:: PK2H - Pack Two 16-bit Floats
434*61046927SAndroid Build Coastguard Worker
435*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
436*61046927SAndroid Build Coastguard Worker
437*61046927SAndroid Build Coastguard Worker   .. math::
438*61046927SAndroid Build Coastguard Worker
439*61046927SAndroid Build Coastguard Worker      \begin{aligned}
440*61046927SAndroid Build Coastguard Worker      dst = & f32\_to\_f16(src.x) | \\
441*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_f16(src.y) \ll 16)
442*61046927SAndroid Build Coastguard Worker      \end{aligned}
443*61046927SAndroid Build Coastguard Worker
444*61046927SAndroid Build Coastguard Worker.. opcode:: PK2US - Pack Two Unsigned 16-bit Scalars
445*61046927SAndroid Build Coastguard Worker
446*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
447*61046927SAndroid Build Coastguard Worker
448*61046927SAndroid Build Coastguard Worker   .. math::
449*61046927SAndroid Build Coastguard Worker
450*61046927SAndroid Build Coastguard Worker      \begin{aligned}
451*61046927SAndroid Build Coastguard Worker      dst = & f32\_to\_unorm16(src.x) | \\
452*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_unorm16(src.y) \ll 16)
453*61046927SAndroid Build Coastguard Worker      \end{aligned}
454*61046927SAndroid Build Coastguard Worker
455*61046927SAndroid Build Coastguard Worker
456*61046927SAndroid Build Coastguard Worker.. opcode:: PK4B - Pack Four Signed 8-bit Scalars
457*61046927SAndroid Build Coastguard Worker
458*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
459*61046927SAndroid Build Coastguard Worker
460*61046927SAndroid Build Coastguard Worker   .. math::
461*61046927SAndroid Build Coastguard Worker
462*61046927SAndroid Build Coastguard Worker      \begin{aligned}
463*61046927SAndroid Build Coastguard Worker      dst = & f32\_to\_snorm8(src.x) | \\
464*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_snorm8(src.y) \ll 8) | \\
465*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_snorm8(src.z) \ll 16) | \\
466*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_snorm8(src.w) \ll 24)
467*61046927SAndroid Build Coastguard Worker      \end{aligned}
468*61046927SAndroid Build Coastguard Worker
469*61046927SAndroid Build Coastguard Worker
470*61046927SAndroid Build Coastguard Worker.. opcode:: PK4UB - Pack Four Unsigned 8-bit Scalars
471*61046927SAndroid Build Coastguard Worker
472*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
473*61046927SAndroid Build Coastguard Worker
474*61046927SAndroid Build Coastguard Worker   .. math::
475*61046927SAndroid Build Coastguard Worker
476*61046927SAndroid Build Coastguard Worker      \begin{aligned}
477*61046927SAndroid Build Coastguard Worker      dst = & f32\_to\_unorm8(src.x) | \\
478*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_unorm8(src.y) \ll 8) | \\
479*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_unorm8(src.z) \ll 16) | \\
480*61046927SAndroid Build Coastguard Worker          ( & f32\_to\_unorm8(src.w) \ll 24)
481*61046927SAndroid Build Coastguard Worker      \end{aligned}
482*61046927SAndroid Build Coastguard Worker
483*61046927SAndroid Build Coastguard Worker
484*61046927SAndroid Build Coastguard Worker.. opcode:: SEQ - Set On Equal
485*61046927SAndroid Build Coastguard Worker
486*61046927SAndroid Build Coastguard Worker   .. math::
487*61046927SAndroid Build Coastguard Worker
488*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x == src1.x) ? 1.0F : 0.0F
489*61046927SAndroid Build Coastguard Worker
490*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y == src1.y) ? 1.0F : 0.0F
491*61046927SAndroid Build Coastguard Worker
492*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z == src1.z) ? 1.0F : 0.0F
493*61046927SAndroid Build Coastguard Worker
494*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w == src1.w) ? 1.0F : 0.0F
495*61046927SAndroid Build Coastguard Worker
496*61046927SAndroid Build Coastguard Worker
497*61046927SAndroid Build Coastguard Worker.. opcode:: SGT - Set On Greater Than
498*61046927SAndroid Build Coastguard Worker
499*61046927SAndroid Build Coastguard Worker   .. math::
500*61046927SAndroid Build Coastguard Worker
501*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x > src1.x) ? 1.0F : 0.0F
502*61046927SAndroid Build Coastguard Worker
503*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y > src1.y) ? 1.0F : 0.0F
504*61046927SAndroid Build Coastguard Worker
505*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z > src1.z) ? 1.0F : 0.0F
506*61046927SAndroid Build Coastguard Worker
507*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w > src1.w) ? 1.0F : 0.0F
508*61046927SAndroid Build Coastguard Worker
509*61046927SAndroid Build Coastguard Worker
510*61046927SAndroid Build Coastguard Worker.. opcode:: SIN - Sine
511*61046927SAndroid Build Coastguard Worker
512*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
513*61046927SAndroid Build Coastguard Worker
514*61046927SAndroid Build Coastguard Worker   .. math::
515*61046927SAndroid Build Coastguard Worker
516*61046927SAndroid Build Coastguard Worker      dst = \sin{src.x}
517*61046927SAndroid Build Coastguard Worker
518*61046927SAndroid Build Coastguard Worker
519*61046927SAndroid Build Coastguard Worker.. opcode:: SLE - Set On Less Equal Than
520*61046927SAndroid Build Coastguard Worker
521*61046927SAndroid Build Coastguard Worker   .. math::
522*61046927SAndroid Build Coastguard Worker
523*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x <= src1.x) ? 1.0F : 0.0F
524*61046927SAndroid Build Coastguard Worker
525*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y <= src1.y) ? 1.0F : 0.0F
526*61046927SAndroid Build Coastguard Worker
527*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z <= src1.z) ? 1.0F : 0.0F
528*61046927SAndroid Build Coastguard Worker
529*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w <= src1.w) ? 1.0F : 0.0F
530*61046927SAndroid Build Coastguard Worker
531*61046927SAndroid Build Coastguard Worker
532*61046927SAndroid Build Coastguard Worker.. opcode:: SNE - Set On Not Equal
533*61046927SAndroid Build Coastguard Worker
534*61046927SAndroid Build Coastguard Worker   .. math::
535*61046927SAndroid Build Coastguard Worker
536*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x != src1.x) ? 1.0F : 0.0F
537*61046927SAndroid Build Coastguard Worker
538*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y != src1.y) ? 1.0F : 0.0F
539*61046927SAndroid Build Coastguard Worker
540*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z != src1.z) ? 1.0F : 0.0F
541*61046927SAndroid Build Coastguard Worker
542*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w != src1.w) ? 1.0F : 0.0F
543*61046927SAndroid Build Coastguard Worker
544*61046927SAndroid Build Coastguard Worker
545*61046927SAndroid Build Coastguard Worker.. opcode:: TEX - Texture Lookup
546*61046927SAndroid Build Coastguard Worker
547*61046927SAndroid Build Coastguard Worker   for array textures *src0.y* contains the slice for 1D,
548*61046927SAndroid Build Coastguard Worker   and *src0.z* contain the slice for 2D.
549*61046927SAndroid Build Coastguard Worker
550*61046927SAndroid Build Coastguard Worker   for shadow textures with no arrays (and not cube map),
551*61046927SAndroid Build Coastguard Worker   *src0.z* contains the reference value.
552*61046927SAndroid Build Coastguard Worker
553*61046927SAndroid Build Coastguard Worker   for shadow textures with arrays, *src0.z* contains
554*61046927SAndroid Build Coastguard Worker   the reference value for 1D arrays, and *src0.w* contains
555*61046927SAndroid Build Coastguard Worker   the reference value for 2D arrays and cube maps.
556*61046927SAndroid Build Coastguard Worker
557*61046927SAndroid Build Coastguard Worker   for cube map array shadow textures, the reference value
558*61046927SAndroid Build Coastguard Worker   cannot be passed in *src0.w*, and TEX2 must be used instead.
559*61046927SAndroid Build Coastguard Worker
560*61046927SAndroid Build Coastguard Worker   .. math::
561*61046927SAndroid Build Coastguard Worker
562*61046927SAndroid Build Coastguard Worker      coord = src0
563*61046927SAndroid Build Coastguard Worker
564*61046927SAndroid Build Coastguard Worker      shadow\_ref = src0.z \textrm{ or } src0.w \textrm{ (optional)}
565*61046927SAndroid Build Coastguard Worker
566*61046927SAndroid Build Coastguard Worker      unit = src1
567*61046927SAndroid Build Coastguard Worker
568*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord, shadow\_ref)
569*61046927SAndroid Build Coastguard Worker
570*61046927SAndroid Build Coastguard Worker
571*61046927SAndroid Build Coastguard Worker.. opcode:: TEX2 - Texture Lookup (for shadow cube map arrays only)
572*61046927SAndroid Build Coastguard Worker
573*61046927SAndroid Build Coastguard Worker   this is the same as TEX, but uses another reg to encode the
574*61046927SAndroid Build Coastguard Worker   reference value.
575*61046927SAndroid Build Coastguard Worker
576*61046927SAndroid Build Coastguard Worker   .. math::
577*61046927SAndroid Build Coastguard Worker
578*61046927SAndroid Build Coastguard Worker      coord = src0
579*61046927SAndroid Build Coastguard Worker
580*61046927SAndroid Build Coastguard Worker      shadow\_ref = src1.x
581*61046927SAndroid Build Coastguard Worker
582*61046927SAndroid Build Coastguard Worker      unit = src2
583*61046927SAndroid Build Coastguard Worker
584*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord, shadow\_ref)
585*61046927SAndroid Build Coastguard Worker
586*61046927SAndroid Build Coastguard Worker
587*61046927SAndroid Build Coastguard Worker.. opcode:: TXD - Texture Lookup with Derivatives
588*61046927SAndroid Build Coastguard Worker
589*61046927SAndroid Build Coastguard Worker   .. math::
590*61046927SAndroid Build Coastguard Worker
591*61046927SAndroid Build Coastguard Worker      coord = src0
592*61046927SAndroid Build Coastguard Worker
593*61046927SAndroid Build Coastguard Worker      ddx = src1
594*61046927SAndroid Build Coastguard Worker
595*61046927SAndroid Build Coastguard Worker      ddy = src2
596*61046927SAndroid Build Coastguard Worker
597*61046927SAndroid Build Coastguard Worker      unit = src3
598*61046927SAndroid Build Coastguard Worker
599*61046927SAndroid Build Coastguard Worker      dst = texture\_sample\_deriv(unit, coord, ddx, ddy)
600*61046927SAndroid Build Coastguard Worker
601*61046927SAndroid Build Coastguard Worker
602*61046927SAndroid Build Coastguard Worker.. opcode:: TXP - Projective Texture Lookup
603*61046927SAndroid Build Coastguard Worker
604*61046927SAndroid Build Coastguard Worker   .. math::
605*61046927SAndroid Build Coastguard Worker
606*61046927SAndroid Build Coastguard Worker      coord.x = src0.x / src0.w
607*61046927SAndroid Build Coastguard Worker
608*61046927SAndroid Build Coastguard Worker      coord.y = src0.y / src0.w
609*61046927SAndroid Build Coastguard Worker
610*61046927SAndroid Build Coastguard Worker      coord.z = src0.z / src0.w
611*61046927SAndroid Build Coastguard Worker
612*61046927SAndroid Build Coastguard Worker      coord.w = src0.w
613*61046927SAndroid Build Coastguard Worker
614*61046927SAndroid Build Coastguard Worker      unit = src1
615*61046927SAndroid Build Coastguard Worker
616*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord)
617*61046927SAndroid Build Coastguard Worker
618*61046927SAndroid Build Coastguard Worker
619*61046927SAndroid Build Coastguard Worker.. opcode:: UP2H - Unpack Two 16-Bit Floats
620*61046927SAndroid Build Coastguard Worker
621*61046927SAndroid Build Coastguard Worker   .. math::
622*61046927SAndroid Build Coastguard Worker
623*61046927SAndroid Build Coastguard Worker      dst.x = f16\_to\_f32(src0.x \& 0xffff)
624*61046927SAndroid Build Coastguard Worker
625*61046927SAndroid Build Coastguard Worker      dst.y = f16\_to\_f32(src0.x \gg 16)
626*61046927SAndroid Build Coastguard Worker
627*61046927SAndroid Build Coastguard Worker      dst.z = f16\_to\_f32(src0.x \& 0xffff)
628*61046927SAndroid Build Coastguard Worker
629*61046927SAndroid Build Coastguard Worker      dst.w = f16\_to\_f32(src0.x \gg 16)
630*61046927SAndroid Build Coastguard Worker
631*61046927SAndroid Build Coastguard Worker   .. note::
632*61046927SAndroid Build Coastguard Worker
633*61046927SAndroid Build Coastguard Worker      Considered for removal.
634*61046927SAndroid Build Coastguard Worker
635*61046927SAndroid Build Coastguard Worker.. opcode:: UP2US - Unpack Two Unsigned 16-Bit Scalars
636*61046927SAndroid Build Coastguard Worker
637*61046927SAndroid Build Coastguard Worker   TBD
638*61046927SAndroid Build Coastguard Worker
639*61046927SAndroid Build Coastguard Worker   .. note::
640*61046927SAndroid Build Coastguard Worker
641*61046927SAndroid Build Coastguard Worker      Considered for removal.
642*61046927SAndroid Build Coastguard Worker
643*61046927SAndroid Build Coastguard Worker.. opcode:: UP4B - Unpack Four Signed 8-Bit Values
644*61046927SAndroid Build Coastguard Worker
645*61046927SAndroid Build Coastguard Worker   TBD
646*61046927SAndroid Build Coastguard Worker
647*61046927SAndroid Build Coastguard Worker   .. note::
648*61046927SAndroid Build Coastguard Worker
649*61046927SAndroid Build Coastguard Worker      Considered for removal.
650*61046927SAndroid Build Coastguard Worker
651*61046927SAndroid Build Coastguard Worker.. opcode:: UP4UB - Unpack Four Unsigned 8-Bit Scalars
652*61046927SAndroid Build Coastguard Worker
653*61046927SAndroid Build Coastguard Worker   TBD
654*61046927SAndroid Build Coastguard Worker
655*61046927SAndroid Build Coastguard Worker   .. note::
656*61046927SAndroid Build Coastguard Worker
657*61046927SAndroid Build Coastguard Worker      Considered for removal.
658*61046927SAndroid Build Coastguard Worker
659*61046927SAndroid Build Coastguard Worker
660*61046927SAndroid Build Coastguard Worker.. opcode:: ARR - Address Register Load With Round
661*61046927SAndroid Build Coastguard Worker
662*61046927SAndroid Build Coastguard Worker   .. math::
663*61046927SAndroid Build Coastguard Worker
664*61046927SAndroid Build Coastguard Worker      dst.x = (int) round(src.x)
665*61046927SAndroid Build Coastguard Worker
666*61046927SAndroid Build Coastguard Worker      dst.y = (int) round(src.y)
667*61046927SAndroid Build Coastguard Worker
668*61046927SAndroid Build Coastguard Worker      dst.z = (int) round(src.z)
669*61046927SAndroid Build Coastguard Worker
670*61046927SAndroid Build Coastguard Worker      dst.w = (int) round(src.w)
671*61046927SAndroid Build Coastguard Worker
672*61046927SAndroid Build Coastguard Worker
673*61046927SAndroid Build Coastguard Worker.. opcode:: SSG - Set Sign
674*61046927SAndroid Build Coastguard Worker
675*61046927SAndroid Build Coastguard Worker   .. math::
676*61046927SAndroid Build Coastguard Worker
677*61046927SAndroid Build Coastguard Worker      dst.x = (src.x > 0) ? 1 : (src.x < 0) ? -1 : 0
678*61046927SAndroid Build Coastguard Worker
679*61046927SAndroid Build Coastguard Worker      dst.y = (src.y > 0) ? 1 : (src.y < 0) ? -1 : 0
680*61046927SAndroid Build Coastguard Worker
681*61046927SAndroid Build Coastguard Worker      dst.z = (src.z > 0) ? 1 : (src.z < 0) ? -1 : 0
682*61046927SAndroid Build Coastguard Worker
683*61046927SAndroid Build Coastguard Worker      dst.w = (src.w > 0) ? 1 : (src.w < 0) ? -1 : 0
684*61046927SAndroid Build Coastguard Worker
685*61046927SAndroid Build Coastguard Worker
686*61046927SAndroid Build Coastguard Worker.. opcode:: CMP - Compare
687*61046927SAndroid Build Coastguard Worker
688*61046927SAndroid Build Coastguard Worker   .. math::
689*61046927SAndroid Build Coastguard Worker
690*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x < 0) ? src1.x : src2.x
691*61046927SAndroid Build Coastguard Worker
692*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y < 0) ? src1.y : src2.y
693*61046927SAndroid Build Coastguard Worker
694*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z < 0) ? src1.z : src2.z
695*61046927SAndroid Build Coastguard Worker
696*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w < 0) ? src1.w : src2.w
697*61046927SAndroid Build Coastguard Worker
698*61046927SAndroid Build Coastguard Worker
699*61046927SAndroid Build Coastguard Worker.. opcode:: KILL_IF - Conditional Discard
700*61046927SAndroid Build Coastguard Worker
701*61046927SAndroid Build Coastguard Worker   Conditional discard.  Allowed in fragment shaders only.
702*61046927SAndroid Build Coastguard Worker
703*61046927SAndroid Build Coastguard Worker   Pseudocode::
704*61046927SAndroid Build Coastguard Worker
705*61046927SAndroid Build Coastguard Worker      if (src.x < 0 || src.y < 0 || src.z < 0 || src.w < 0)
706*61046927SAndroid Build Coastguard Worker         discard
707*61046927SAndroid Build Coastguard Worker      endif
708*61046927SAndroid Build Coastguard Worker
709*61046927SAndroid Build Coastguard Worker
710*61046927SAndroid Build Coastguard Worker.. opcode:: KILL - Discard
711*61046927SAndroid Build Coastguard Worker
712*61046927SAndroid Build Coastguard Worker   Unconditional discard.  Allowed in fragment shaders only.
713*61046927SAndroid Build Coastguard Worker
714*61046927SAndroid Build Coastguard Worker
715*61046927SAndroid Build Coastguard Worker.. opcode:: DEMOTE - Demote Invocation to a Helper
716*61046927SAndroid Build Coastguard Worker
717*61046927SAndroid Build Coastguard Worker   This demotes the current invocation to a helper, but continues
718*61046927SAndroid Build Coastguard Worker   execution (while KILL may or may not terminate the
719*61046927SAndroid Build Coastguard Worker   invocation). After this runs, all the usual helper invocation rules
720*61046927SAndroid Build Coastguard Worker   apply about discarding buffer and render target writes. This is
721*61046927SAndroid Build Coastguard Worker   useful for having accurate derivatives in the other invocations
722*61046927SAndroid Build Coastguard Worker   which have not been demoted.
723*61046927SAndroid Build Coastguard Worker
724*61046927SAndroid Build Coastguard Worker   Allowed in fragment shaders only.
725*61046927SAndroid Build Coastguard Worker
726*61046927SAndroid Build Coastguard Worker
727*61046927SAndroid Build Coastguard Worker.. opcode:: READ_HELPER - Reads Invocation Helper Status
728*61046927SAndroid Build Coastguard Worker
729*61046927SAndroid Build Coastguard Worker   This is identical to ``TGSI_SEMANTIC_HELPER_INVOCATION``, except
730*61046927SAndroid Build Coastguard Worker   this will read the current value, which might change as a result of
731*61046927SAndroid Build Coastguard Worker   a ``DEMOTE`` instruction.
732*61046927SAndroid Build Coastguard Worker
733*61046927SAndroid Build Coastguard Worker   Allowed in fragment shaders only.
734*61046927SAndroid Build Coastguard Worker
735*61046927SAndroid Build Coastguard Worker
736*61046927SAndroid Build Coastguard Worker.. opcode:: TXB - Texture Lookup With Bias
737*61046927SAndroid Build Coastguard Worker
738*61046927SAndroid Build Coastguard Worker   for cube map array textures and shadow cube maps, the bias value
739*61046927SAndroid Build Coastguard Worker   cannot be passed in *src0.w*, and TXB2 must be used instead.
740*61046927SAndroid Build Coastguard Worker
741*61046927SAndroid Build Coastguard Worker   if the target is a shadow texture, the reference value is always
742*61046927SAndroid Build Coastguard Worker   in *src.z* (this prevents shadow 3d and shadow 2d arrays from
743*61046927SAndroid Build Coastguard Worker   using this instruction, but this is not needed).
744*61046927SAndroid Build Coastguard Worker
745*61046927SAndroid Build Coastguard Worker   .. math::
746*61046927SAndroid Build Coastguard Worker
747*61046927SAndroid Build Coastguard Worker      coord.x = src0.x
748*61046927SAndroid Build Coastguard Worker
749*61046927SAndroid Build Coastguard Worker      coord.y = src0.y
750*61046927SAndroid Build Coastguard Worker
751*61046927SAndroid Build Coastguard Worker      coord.z = src0.z
752*61046927SAndroid Build Coastguard Worker
753*61046927SAndroid Build Coastguard Worker      coord.w = none
754*61046927SAndroid Build Coastguard Worker
755*61046927SAndroid Build Coastguard Worker      bias = src0.w
756*61046927SAndroid Build Coastguard Worker
757*61046927SAndroid Build Coastguard Worker      unit = src1
758*61046927SAndroid Build Coastguard Worker
759*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord, bias)
760*61046927SAndroid Build Coastguard Worker
761*61046927SAndroid Build Coastguard Worker
762*61046927SAndroid Build Coastguard Worker.. opcode:: TXB2 - Texture Lookup With Bias (some cube maps only)
763*61046927SAndroid Build Coastguard Worker
764*61046927SAndroid Build Coastguard Worker   this is the same as TXB, but uses another reg to encode the
765*61046927SAndroid Build Coastguard Worker   LOD bias value for cube map arrays and shadow cube maps.
766*61046927SAndroid Build Coastguard Worker   Presumably shadow 2d arrays and shadow 3d targets could use
767*61046927SAndroid Build Coastguard Worker   this encoding too, but this is not legal.
768*61046927SAndroid Build Coastguard Worker
769*61046927SAndroid Build Coastguard Worker   if the target is a shadow cube map array, the reference value is in
770*61046927SAndroid Build Coastguard Worker   *src1.y*.
771*61046927SAndroid Build Coastguard Worker
772*61046927SAndroid Build Coastguard Worker   .. math::
773*61046927SAndroid Build Coastguard Worker
774*61046927SAndroid Build Coastguard Worker      coord = src0
775*61046927SAndroid Build Coastguard Worker
776*61046927SAndroid Build Coastguard Worker      bias = src1.x
777*61046927SAndroid Build Coastguard Worker
778*61046927SAndroid Build Coastguard Worker      unit = src2
779*61046927SAndroid Build Coastguard Worker
780*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord, bias)
781*61046927SAndroid Build Coastguard Worker
782*61046927SAndroid Build Coastguard Worker
783*61046927SAndroid Build Coastguard Worker.. opcode:: DIV - Divide
784*61046927SAndroid Build Coastguard Worker
785*61046927SAndroid Build Coastguard Worker   .. math::
786*61046927SAndroid Build Coastguard Worker
787*61046927SAndroid Build Coastguard Worker      dst.x = \frac{src0.x}{src1.x}
788*61046927SAndroid Build Coastguard Worker
789*61046927SAndroid Build Coastguard Worker      dst.y = \frac{src0.y}{src1.y}
790*61046927SAndroid Build Coastguard Worker
791*61046927SAndroid Build Coastguard Worker      dst.z = \frac{src0.z}{src1.z}
792*61046927SAndroid Build Coastguard Worker
793*61046927SAndroid Build Coastguard Worker      dst.w = \frac{src0.w}{src1.w}
794*61046927SAndroid Build Coastguard Worker
795*61046927SAndroid Build Coastguard Worker
796*61046927SAndroid Build Coastguard Worker.. opcode:: DP2 - 2-component Dot Product
797*61046927SAndroid Build Coastguard Worker
798*61046927SAndroid Build Coastguard Worker   This instruction replicates its result.
799*61046927SAndroid Build Coastguard Worker
800*61046927SAndroid Build Coastguard Worker   .. math::
801*61046927SAndroid Build Coastguard Worker
802*61046927SAndroid Build Coastguard Worker      \begin{aligned}
803*61046927SAndroid Build Coastguard Worker      dst = & src0.x \times src1.x + \\
804*61046927SAndroid Build Coastguard Worker            & src0.y \times src1.y
805*61046927SAndroid Build Coastguard Worker      \end{aligned}
806*61046927SAndroid Build Coastguard Worker
807*61046927SAndroid Build Coastguard Worker.. opcode:: TEX_LZ - Texture Lookup With LOD = 0
808*61046927SAndroid Build Coastguard Worker
809*61046927SAndroid Build Coastguard Worker   This is the same as TXL with LOD = 0. Like every texture opcode, it obeys
810*61046927SAndroid Build Coastguard Worker   pipe_sampler_view::u.tex.first_level and pipe_sampler_state::min_lod.
811*61046927SAndroid Build Coastguard Worker   There is no way to override those two in shaders.
812*61046927SAndroid Build Coastguard Worker
813*61046927SAndroid Build Coastguard Worker   .. math::
814*61046927SAndroid Build Coastguard Worker
815*61046927SAndroid Build Coastguard Worker      coord.x = src0.x
816*61046927SAndroid Build Coastguard Worker
817*61046927SAndroid Build Coastguard Worker      coord.y = src0.y
818*61046927SAndroid Build Coastguard Worker
819*61046927SAndroid Build Coastguard Worker      coord.z = src0.z
820*61046927SAndroid Build Coastguard Worker
821*61046927SAndroid Build Coastguard Worker      coord.w = none
822*61046927SAndroid Build Coastguard Worker
823*61046927SAndroid Build Coastguard Worker      lod = 0
824*61046927SAndroid Build Coastguard Worker
825*61046927SAndroid Build Coastguard Worker      unit = src1
826*61046927SAndroid Build Coastguard Worker
827*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord, lod)
828*61046927SAndroid Build Coastguard Worker
829*61046927SAndroid Build Coastguard Worker
830*61046927SAndroid Build Coastguard Worker.. opcode:: TXL - Texture Lookup With explicit LOD
831*61046927SAndroid Build Coastguard Worker
832*61046927SAndroid Build Coastguard Worker   for cube map array textures, the explicit LOD value
833*61046927SAndroid Build Coastguard Worker   cannot be passed in *src0.w*, and TXL2 must be used instead.
834*61046927SAndroid Build Coastguard Worker
835*61046927SAndroid Build Coastguard Worker   if the target is a shadow texture, the reference value is always
836*61046927SAndroid Build Coastguard Worker   in *src.z* (this prevents shadow 3d / 2d array / cube targets from
837*61046927SAndroid Build Coastguard Worker   using this instruction, but this is not needed).
838*61046927SAndroid Build Coastguard Worker
839*61046927SAndroid Build Coastguard Worker   .. math::
840*61046927SAndroid Build Coastguard Worker
841*61046927SAndroid Build Coastguard Worker      coord.x = src0.x
842*61046927SAndroid Build Coastguard Worker
843*61046927SAndroid Build Coastguard Worker      coord.y = src0.y
844*61046927SAndroid Build Coastguard Worker
845*61046927SAndroid Build Coastguard Worker      coord.z = src0.z
846*61046927SAndroid Build Coastguard Worker
847*61046927SAndroid Build Coastguard Worker      coord.w = none
848*61046927SAndroid Build Coastguard Worker
849*61046927SAndroid Build Coastguard Worker      lod = src0.w
850*61046927SAndroid Build Coastguard Worker
851*61046927SAndroid Build Coastguard Worker      unit = src1
852*61046927SAndroid Build Coastguard Worker
853*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord, lod)
854*61046927SAndroid Build Coastguard Worker
855*61046927SAndroid Build Coastguard Worker
856*61046927SAndroid Build Coastguard Worker.. opcode:: TXL2 - Texture Lookup With explicit LOD (for cube map arrays only)
857*61046927SAndroid Build Coastguard Worker
858*61046927SAndroid Build Coastguard Worker   this is the same as TXL, but uses another reg to encode the
859*61046927SAndroid Build Coastguard Worker   explicit LOD value.
860*61046927SAndroid Build Coastguard Worker   Presumably shadow 3d / 2d array / cube targets could use
861*61046927SAndroid Build Coastguard Worker   this encoding too, but this is not legal.
862*61046927SAndroid Build Coastguard Worker
863*61046927SAndroid Build Coastguard Worker   if the target is a shadow cube map array, the reference value is in
864*61046927SAndroid Build Coastguard Worker   *src1.y*.
865*61046927SAndroid Build Coastguard Worker
866*61046927SAndroid Build Coastguard Worker   .. math::
867*61046927SAndroid Build Coastguard Worker
868*61046927SAndroid Build Coastguard Worker      coord = src0
869*61046927SAndroid Build Coastguard Worker
870*61046927SAndroid Build Coastguard Worker      lod = src1.x
871*61046927SAndroid Build Coastguard Worker
872*61046927SAndroid Build Coastguard Worker      unit = src2
873*61046927SAndroid Build Coastguard Worker
874*61046927SAndroid Build Coastguard Worker      dst = texture\_sample(unit, coord, lod)
875*61046927SAndroid Build Coastguard Worker
876*61046927SAndroid Build Coastguard Worker
877*61046927SAndroid Build Coastguard WorkerCompute ISA
878*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^
879*61046927SAndroid Build Coastguard Worker
880*61046927SAndroid Build Coastguard WorkerThese opcodes are primarily provided for special-use computational shaders.
881*61046927SAndroid Build Coastguard WorkerSupport for these opcodes indicated by a special pipe capability bit (TBD).
882*61046927SAndroid Build Coastguard Worker
883*61046927SAndroid Build Coastguard WorkerXXX doesn't look like most of the opcodes really belong here.
884*61046927SAndroid Build Coastguard Worker
885*61046927SAndroid Build Coastguard Worker.. opcode:: CEIL - Ceiling
886*61046927SAndroid Build Coastguard Worker
887*61046927SAndroid Build Coastguard Worker   .. math::
888*61046927SAndroid Build Coastguard Worker
889*61046927SAndroid Build Coastguard Worker      dst.x = \lceil src.x\rceil
890*61046927SAndroid Build Coastguard Worker
891*61046927SAndroid Build Coastguard Worker      dst.y = \lceil src.y\rceil
892*61046927SAndroid Build Coastguard Worker
893*61046927SAndroid Build Coastguard Worker      dst.z = \lceil src.z\rceil
894*61046927SAndroid Build Coastguard Worker
895*61046927SAndroid Build Coastguard Worker      dst.w = \lceil src.w\rceil
896*61046927SAndroid Build Coastguard Worker
897*61046927SAndroid Build Coastguard Worker
898*61046927SAndroid Build Coastguard Worker.. opcode:: TRUNC - Truncate
899*61046927SAndroid Build Coastguard Worker
900*61046927SAndroid Build Coastguard Worker   .. math::
901*61046927SAndroid Build Coastguard Worker
902*61046927SAndroid Build Coastguard Worker      dst.x = trunc(src.x)
903*61046927SAndroid Build Coastguard Worker
904*61046927SAndroid Build Coastguard Worker      dst.y = trunc(src.y)
905*61046927SAndroid Build Coastguard Worker
906*61046927SAndroid Build Coastguard Worker      dst.z = trunc(src.z)
907*61046927SAndroid Build Coastguard Worker
908*61046927SAndroid Build Coastguard Worker      dst.w = trunc(src.w)
909*61046927SAndroid Build Coastguard Worker
910*61046927SAndroid Build Coastguard Worker
911*61046927SAndroid Build Coastguard Worker.. opcode:: MOD - Modulus
912*61046927SAndroid Build Coastguard Worker
913*61046927SAndroid Build Coastguard Worker   .. math::
914*61046927SAndroid Build Coastguard Worker
915*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \bmod src1.x
916*61046927SAndroid Build Coastguard Worker
917*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \bmod src1.y
918*61046927SAndroid Build Coastguard Worker
919*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \bmod src1.z
920*61046927SAndroid Build Coastguard Worker
921*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \bmod src1.w
922*61046927SAndroid Build Coastguard Worker
923*61046927SAndroid Build Coastguard Worker
924*61046927SAndroid Build Coastguard Worker.. opcode:: UARL - Integer Address Register Load
925*61046927SAndroid Build Coastguard Worker
926*61046927SAndroid Build Coastguard Worker   Moves the contents of the source register, assumed to be an integer, into the
927*61046927SAndroid Build Coastguard Worker   destination register, which is assumed to be an address (ADDR) register.
928*61046927SAndroid Build Coastguard Worker
929*61046927SAndroid Build Coastguard Worker
930*61046927SAndroid Build Coastguard Worker.. opcode:: TXF - Texel Fetch
931*61046927SAndroid Build Coastguard Worker
932*61046927SAndroid Build Coastguard Worker   As per :ext:`GL_NV_gpu_program4`, extract a single texel from a specified
933*61046927SAndroid Build Coastguard Worker   texture image or PIPE_BUFFER resource. The source sampler may not be a
934*61046927SAndroid Build Coastguard Worker   CUBE or SHADOW.  *src0* is a
935*61046927SAndroid Build Coastguard Worker   four-component signed integer vector used to identify the single texel
936*61046927SAndroid Build Coastguard Worker   accessed. 3 components + level.  If the texture is multisampled, then
937*61046927SAndroid Build Coastguard Worker   the fourth component indicates the sample, not the mipmap level.
938*61046927SAndroid Build Coastguard Worker   Just like texture instructions, an optional
939*61046927SAndroid Build Coastguard Worker   offset vector is provided, which is subject to various driver restrictions
940*61046927SAndroid Build Coastguard Worker   (regarding range, source of offsets). This instruction ignores the sampler
941*61046927SAndroid Build Coastguard Worker   state.
942*61046927SAndroid Build Coastguard Worker
943*61046927SAndroid Build Coastguard Worker   TXF(uint_vec coord, int_vec offset).
944*61046927SAndroid Build Coastguard Worker
945*61046927SAndroid Build Coastguard Worker
946*61046927SAndroid Build Coastguard Worker.. opcode:: TXQ - Texture Size Query
947*61046927SAndroid Build Coastguard Worker
948*61046927SAndroid Build Coastguard Worker   As per :ext:`GL_NV_gpu_program4`, retrieve the dimensions of the texture
949*61046927SAndroid Build Coastguard Worker   depending on   the target. For 1D (width), 2D/RECT/CUBE (width, height),
950*61046927SAndroid Build Coastguard Worker   3D (width, height, depth), 1D array (width, layers), 2D array (width,
951*61046927SAndroid Build Coastguard Worker   height, layers).  Also return the number of accessible levels
952*61046927SAndroid Build Coastguard Worker   (last_level - first_level + 1) in W.
953*61046927SAndroid Build Coastguard Worker
954*61046927SAndroid Build Coastguard Worker   For components which don't return a resource dimension, their value
955*61046927SAndroid Build Coastguard Worker   is undefined.
956*61046927SAndroid Build Coastguard Worker
957*61046927SAndroid Build Coastguard Worker   .. math::
958*61046927SAndroid Build Coastguard Worker
959*61046927SAndroid Build Coastguard Worker      lod = src0.x
960*61046927SAndroid Build Coastguard Worker
961*61046927SAndroid Build Coastguard Worker      dst.x = texture\_width(unit, lod)
962*61046927SAndroid Build Coastguard Worker
963*61046927SAndroid Build Coastguard Worker      dst.y = texture\_height(unit, lod)
964*61046927SAndroid Build Coastguard Worker
965*61046927SAndroid Build Coastguard Worker      dst.z = texture\_depth(unit, lod)
966*61046927SAndroid Build Coastguard Worker
967*61046927SAndroid Build Coastguard Worker      dst.w = texture\_levels(unit)
968*61046927SAndroid Build Coastguard Worker
969*61046927SAndroid Build Coastguard Worker
970*61046927SAndroid Build Coastguard Worker.. opcode:: TXQS - Texture Samples Query
971*61046927SAndroid Build Coastguard Worker
972*61046927SAndroid Build Coastguard Worker   This retrieves the number of samples in the texture, and stores it
973*61046927SAndroid Build Coastguard Worker   into the x component as an unsigned integer. The other components are
974*61046927SAndroid Build Coastguard Worker   undefined.  If the texture is not multisampled, this function returns
975*61046927SAndroid Build Coastguard Worker   (1, undef, undef, undef).
976*61046927SAndroid Build Coastguard Worker
977*61046927SAndroid Build Coastguard Worker   .. math::
978*61046927SAndroid Build Coastguard Worker
979*61046927SAndroid Build Coastguard Worker      dst.x = texture\_samples(unit)
980*61046927SAndroid Build Coastguard Worker
981*61046927SAndroid Build Coastguard Worker
982*61046927SAndroid Build Coastguard Worker.. opcode:: TG4 - Texture Gather
983*61046927SAndroid Build Coastguard Worker
984*61046927SAndroid Build Coastguard Worker   As per :ext:`GL_ARB_texture_gather`, gathers the four texels to be used in a
985*61046927SAndroid Build Coastguard Worker   bi-linear   filtering operation and packs them into a single register.
986*61046927SAndroid Build Coastguard Worker   Only works with 2D, 2D array, cubemaps, and cubemaps arrays.  For 2D
987*61046927SAndroid Build Coastguard Worker   textures, only the addressing modes of the sampler and the top level of any
988*61046927SAndroid Build Coastguard Worker   mip pyramid are used. Set W to zero.  It behaves like the TEX instruction,
989*61046927SAndroid Build Coastguard Worker   but a filtered sample is not generated. The four samples that contribute to
990*61046927SAndroid Build Coastguard Worker   filtering are placed into XYZW in clockwise order, starting with the (u,v)
991*61046927SAndroid Build Coastguard Worker   texture coordinate delta at the following locations (-, +), (+, +), (+, -),
992*61046927SAndroid Build Coastguard Worker   (-, -), where the magnitude of the deltas are half a texel.
993*61046927SAndroid Build Coastguard Worker
994*61046927SAndroid Build Coastguard Worker   PIPE_CAP_TEXTURE_SM5 enhances this instruction to support shadow per-sample
995*61046927SAndroid Build Coastguard Worker   depth compares, single component selection, and a non-constant offset. It
996*61046927SAndroid Build Coastguard Worker   doesn't allow support for the GL independent offset to get i0,j0. This would
997*61046927SAndroid Build Coastguard Worker   require another CAP is HW can do it natively. For now we lower that before
998*61046927SAndroid Build Coastguard Worker   TGSI.
999*61046927SAndroid Build Coastguard Worker
1000*61046927SAndroid Build Coastguard Worker   PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE changes the encoding so that component
1001*61046927SAndroid Build Coastguard Worker   is stored in the sampler source swizzle x.
1002*61046927SAndroid Build Coastguard Worker
1003*61046927SAndroid Build Coastguard Worker   (without TGSI_TG4_COMPONENT_IN_SWIZZLE)
1004*61046927SAndroid Build Coastguard Worker
1005*61046927SAndroid Build Coastguard Worker   .. math::
1006*61046927SAndroid Build Coastguard Worker
1007*61046927SAndroid Build Coastguard Worker      coord = src0
1008*61046927SAndroid Build Coastguard Worker
1009*61046927SAndroid Build Coastguard Worker      component = src1
1010*61046927SAndroid Build Coastguard Worker
1011*61046927SAndroid Build Coastguard Worker      dst = texture\_gather4 (unit, coord, component)
1012*61046927SAndroid Build Coastguard Worker
1013*61046927SAndroid Build Coastguard Worker   (with TGSI_TG4_COMPONENT_IN_SWIZZLE)
1014*61046927SAndroid Build Coastguard Worker
1015*61046927SAndroid Build Coastguard Worker   .. math::
1016*61046927SAndroid Build Coastguard Worker
1017*61046927SAndroid Build Coastguard Worker      coord = src0
1018*61046927SAndroid Build Coastguard Worker
1019*61046927SAndroid Build Coastguard Worker      dst = texture\_gather4 (unit, coord)
1020*61046927SAndroid Build Coastguard Worker
1021*61046927SAndroid Build Coastguard Worker      \text{component is encoded in sampler swizzle.}
1022*61046927SAndroid Build Coastguard Worker
1023*61046927SAndroid Build Coastguard Worker   (with SM5 - cube array shadow)
1024*61046927SAndroid Build Coastguard Worker
1025*61046927SAndroid Build Coastguard Worker   .. math::
1026*61046927SAndroid Build Coastguard Worker
1027*61046927SAndroid Build Coastguard Worker      coord = src0
1028*61046927SAndroid Build Coastguard Worker
1029*61046927SAndroid Build Coastguard Worker      compare = src1
1030*61046927SAndroid Build Coastguard Worker
1031*61046927SAndroid Build Coastguard Worker      dst = texture\_gather (uint, coord, compare)
1032*61046927SAndroid Build Coastguard Worker
1033*61046927SAndroid Build Coastguard Worker.. opcode:: LODQ - level of detail query
1034*61046927SAndroid Build Coastguard Worker
1035*61046927SAndroid Build Coastguard Worker   Compute the LOD information that the texture pipe would use to access the
1036*61046927SAndroid Build Coastguard Worker   texture. The Y component contains the computed LOD lambda_prime. The X
1037*61046927SAndroid Build Coastguard Worker   component contains the LOD that will be accessed, based on min/max LODs
1038*61046927SAndroid Build Coastguard Worker   and mipmap filters.
1039*61046927SAndroid Build Coastguard Worker
1040*61046927SAndroid Build Coastguard Worker   .. math::
1041*61046927SAndroid Build Coastguard Worker
1042*61046927SAndroid Build Coastguard Worker      coord = src0
1043*61046927SAndroid Build Coastguard Worker
1044*61046927SAndroid Build Coastguard Worker      dst.xy = lodq(uint, coord);
1045*61046927SAndroid Build Coastguard Worker
1046*61046927SAndroid Build Coastguard Worker.. opcode:: CLOCK - retrieve the current shader time
1047*61046927SAndroid Build Coastguard Worker
1048*61046927SAndroid Build Coastguard Worker   Invoking this instruction multiple times in the same shader should
1049*61046927SAndroid Build Coastguard Worker   cause monotonically increasing values to be returned. The values
1050*61046927SAndroid Build Coastguard Worker   are implicitly 64-bit, so if fewer than 64 bits of precision are
1051*61046927SAndroid Build Coastguard Worker   available, to provide expected wraparound semantics, the value
1052*61046927SAndroid Build Coastguard Worker   should be shifted up so that the most significant bit of the time
1053*61046927SAndroid Build Coastguard Worker   is the most significant bit of the 64-bit value.
1054*61046927SAndroid Build Coastguard Worker
1055*61046927SAndroid Build Coastguard Worker   .. math::
1056*61046927SAndroid Build Coastguard Worker
1057*61046927SAndroid Build Coastguard Worker      dst.xy = clock()
1058*61046927SAndroid Build Coastguard Worker
1059*61046927SAndroid Build Coastguard Worker
1060*61046927SAndroid Build Coastguard WorkerInteger ISA
1061*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^
1062*61046927SAndroid Build Coastguard WorkerThese opcodes are used for integer operations.
1063*61046927SAndroid Build Coastguard WorkerSupport for these opcodes indicated by PIPE_SHADER_CAP_INTEGERS (all of them?)
1064*61046927SAndroid Build Coastguard Worker
1065*61046927SAndroid Build Coastguard Worker
1066*61046927SAndroid Build Coastguard Worker.. opcode:: I2F - Signed Integer To Float
1067*61046927SAndroid Build Coastguard Worker
1068*61046927SAndroid Build Coastguard Worker   Rounding is unspecified (round to nearest even suggested).
1069*61046927SAndroid Build Coastguard Worker
1070*61046927SAndroid Build Coastguard Worker   .. math::
1071*61046927SAndroid Build Coastguard Worker
1072*61046927SAndroid Build Coastguard Worker      dst.x = (float) src.x
1073*61046927SAndroid Build Coastguard Worker
1074*61046927SAndroid Build Coastguard Worker      dst.y = (float) src.y
1075*61046927SAndroid Build Coastguard Worker
1076*61046927SAndroid Build Coastguard Worker      dst.z = (float) src.z
1077*61046927SAndroid Build Coastguard Worker
1078*61046927SAndroid Build Coastguard Worker      dst.w = (float) src.w
1079*61046927SAndroid Build Coastguard Worker
1080*61046927SAndroid Build Coastguard Worker
1081*61046927SAndroid Build Coastguard Worker.. opcode:: U2F - Unsigned Integer To Float
1082*61046927SAndroid Build Coastguard Worker
1083*61046927SAndroid Build Coastguard Worker   Rounding is unspecified (round to nearest even suggested).
1084*61046927SAndroid Build Coastguard Worker
1085*61046927SAndroid Build Coastguard Worker   .. math::
1086*61046927SAndroid Build Coastguard Worker
1087*61046927SAndroid Build Coastguard Worker      dst.x = (float) src.x
1088*61046927SAndroid Build Coastguard Worker
1089*61046927SAndroid Build Coastguard Worker      dst.y = (float) src.y
1090*61046927SAndroid Build Coastguard Worker
1091*61046927SAndroid Build Coastguard Worker      dst.z = (float) src.z
1092*61046927SAndroid Build Coastguard Worker
1093*61046927SAndroid Build Coastguard Worker      dst.w = (float) src.w
1094*61046927SAndroid Build Coastguard Worker
1095*61046927SAndroid Build Coastguard Worker
1096*61046927SAndroid Build Coastguard Worker.. opcode:: F2I - Float to Signed Integer
1097*61046927SAndroid Build Coastguard Worker
1098*61046927SAndroid Build Coastguard Worker   Rounding is towards zero (truncate).
1099*61046927SAndroid Build Coastguard Worker   Values outside signed range (including NaNs) produce undefined results.
1100*61046927SAndroid Build Coastguard Worker
1101*61046927SAndroid Build Coastguard Worker   .. math::
1102*61046927SAndroid Build Coastguard Worker
1103*61046927SAndroid Build Coastguard Worker      dst.x = (int) src.x
1104*61046927SAndroid Build Coastguard Worker
1105*61046927SAndroid Build Coastguard Worker      dst.y = (int) src.y
1106*61046927SAndroid Build Coastguard Worker
1107*61046927SAndroid Build Coastguard Worker      dst.z = (int) src.z
1108*61046927SAndroid Build Coastguard Worker
1109*61046927SAndroid Build Coastguard Worker      dst.w = (int) src.w
1110*61046927SAndroid Build Coastguard Worker
1111*61046927SAndroid Build Coastguard Worker
1112*61046927SAndroid Build Coastguard Worker.. opcode:: F2U - Float to Unsigned Integer
1113*61046927SAndroid Build Coastguard Worker
1114*61046927SAndroid Build Coastguard Worker   Rounding is towards zero (truncate).
1115*61046927SAndroid Build Coastguard Worker   Values outside unsigned range (including NaNs) produce undefined results.
1116*61046927SAndroid Build Coastguard Worker
1117*61046927SAndroid Build Coastguard Worker   .. math::
1118*61046927SAndroid Build Coastguard Worker
1119*61046927SAndroid Build Coastguard Worker      dst.x = (unsigned) src.x
1120*61046927SAndroid Build Coastguard Worker
1121*61046927SAndroid Build Coastguard Worker      dst.y = (unsigned) src.y
1122*61046927SAndroid Build Coastguard Worker
1123*61046927SAndroid Build Coastguard Worker      dst.z = (unsigned) src.z
1124*61046927SAndroid Build Coastguard Worker
1125*61046927SAndroid Build Coastguard Worker      dst.w = (unsigned) src.w
1126*61046927SAndroid Build Coastguard Worker
1127*61046927SAndroid Build Coastguard Worker
1128*61046927SAndroid Build Coastguard Worker.. opcode:: UADD - Integer Add
1129*61046927SAndroid Build Coastguard Worker
1130*61046927SAndroid Build Coastguard Worker   This instruction works the same for signed and unsigned integers.
1131*61046927SAndroid Build Coastguard Worker   The low 32bit of the result is returned.
1132*61046927SAndroid Build Coastguard Worker
1133*61046927SAndroid Build Coastguard Worker   .. math::
1134*61046927SAndroid Build Coastguard Worker
1135*61046927SAndroid Build Coastguard Worker      dst.x = src0.x + src1.x
1136*61046927SAndroid Build Coastguard Worker
1137*61046927SAndroid Build Coastguard Worker      dst.y = src0.y + src1.y
1138*61046927SAndroid Build Coastguard Worker
1139*61046927SAndroid Build Coastguard Worker      dst.z = src0.z + src1.z
1140*61046927SAndroid Build Coastguard Worker
1141*61046927SAndroid Build Coastguard Worker      dst.w = src0.w + src1.w
1142*61046927SAndroid Build Coastguard Worker
1143*61046927SAndroid Build Coastguard Worker
1144*61046927SAndroid Build Coastguard Worker.. opcode:: UMAD - Integer Multiply And Add
1145*61046927SAndroid Build Coastguard Worker
1146*61046927SAndroid Build Coastguard Worker   This instruction works the same for signed and unsigned integers.
1147*61046927SAndroid Build Coastguard Worker   The multiplication returns the low 32bit (as does the result itself).
1148*61046927SAndroid Build Coastguard Worker
1149*61046927SAndroid Build Coastguard Worker   .. math::
1150*61046927SAndroid Build Coastguard Worker
1151*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \times src1.x + src2.x
1152*61046927SAndroid Build Coastguard Worker
1153*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \times src1.y + src2.y
1154*61046927SAndroid Build Coastguard Worker
1155*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \times src1.z + src2.z
1156*61046927SAndroid Build Coastguard Worker
1157*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \times src1.w + src2.w
1158*61046927SAndroid Build Coastguard Worker
1159*61046927SAndroid Build Coastguard Worker
1160*61046927SAndroid Build Coastguard Worker.. opcode:: UMUL - Integer Multiply
1161*61046927SAndroid Build Coastguard Worker
1162*61046927SAndroid Build Coastguard Worker   This instruction works the same for signed and unsigned integers.
1163*61046927SAndroid Build Coastguard Worker   The low 32bit of the result is returned.
1164*61046927SAndroid Build Coastguard Worker
1165*61046927SAndroid Build Coastguard Worker   .. math::
1166*61046927SAndroid Build Coastguard Worker
1167*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \times src1.x
1168*61046927SAndroid Build Coastguard Worker
1169*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \times src1.y
1170*61046927SAndroid Build Coastguard Worker
1171*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \times src1.z
1172*61046927SAndroid Build Coastguard Worker
1173*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \times src1.w
1174*61046927SAndroid Build Coastguard Worker
1175*61046927SAndroid Build Coastguard Worker
1176*61046927SAndroid Build Coastguard Worker.. opcode:: IMUL_HI - Signed Integer Multiply High Bits
1177*61046927SAndroid Build Coastguard Worker
1178*61046927SAndroid Build Coastguard Worker   The high 32bits of the multiplication of 2 signed integers are returned.
1179*61046927SAndroid Build Coastguard Worker
1180*61046927SAndroid Build Coastguard Worker   .. math::
1181*61046927SAndroid Build Coastguard Worker
1182*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x \times src1.x) \gg 32
1183*61046927SAndroid Build Coastguard Worker
1184*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y \times src1.y) \gg 32
1185*61046927SAndroid Build Coastguard Worker
1186*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z \times src1.z) \gg 32
1187*61046927SAndroid Build Coastguard Worker
1188*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w \times src1.w) \gg 32
1189*61046927SAndroid Build Coastguard Worker
1190*61046927SAndroid Build Coastguard Worker
1191*61046927SAndroid Build Coastguard Worker.. opcode:: UMUL_HI - Unsigned Integer Multiply High Bits
1192*61046927SAndroid Build Coastguard Worker
1193*61046927SAndroid Build Coastguard Worker   The high 32bits of the multiplication of 2 unsigned integers are returned.
1194*61046927SAndroid Build Coastguard Worker
1195*61046927SAndroid Build Coastguard Worker   .. math::
1196*61046927SAndroid Build Coastguard Worker
1197*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x \times src1.x) \gg 32
1198*61046927SAndroid Build Coastguard Worker
1199*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y \times src1.y) \gg 32
1200*61046927SAndroid Build Coastguard Worker
1201*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z \times src1.z) \gg 32
1202*61046927SAndroid Build Coastguard Worker
1203*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w \times src1.w) \gg 32
1204*61046927SAndroid Build Coastguard Worker
1205*61046927SAndroid Build Coastguard Worker
1206*61046927SAndroid Build Coastguard Worker.. opcode:: IDIV - Signed Integer Division
1207*61046927SAndroid Build Coastguard Worker
1208*61046927SAndroid Build Coastguard Worker   TBD: behavior for division by zero.
1209*61046927SAndroid Build Coastguard Worker
1210*61046927SAndroid Build Coastguard Worker   .. math::
1211*61046927SAndroid Build Coastguard Worker
1212*61046927SAndroid Build Coastguard Worker      dst.x = \frac{src0.x}{src1.x}
1213*61046927SAndroid Build Coastguard Worker
1214*61046927SAndroid Build Coastguard Worker      dst.y = \frac{src0.y}{src1.y}
1215*61046927SAndroid Build Coastguard Worker
1216*61046927SAndroid Build Coastguard Worker      dst.z = \frac{src0.z}{src1.z}
1217*61046927SAndroid Build Coastguard Worker
1218*61046927SAndroid Build Coastguard Worker      dst.w = \frac{src0.w}{src1.w}
1219*61046927SAndroid Build Coastguard Worker
1220*61046927SAndroid Build Coastguard Worker
1221*61046927SAndroid Build Coastguard Worker.. opcode:: UDIV - Unsigned Integer Division
1222*61046927SAndroid Build Coastguard Worker
1223*61046927SAndroid Build Coastguard Worker   For division by zero, ``0xffffffff`` is returned.
1224*61046927SAndroid Build Coastguard Worker
1225*61046927SAndroid Build Coastguard Worker   .. math::
1226*61046927SAndroid Build Coastguard Worker
1227*61046927SAndroid Build Coastguard Worker      dst.x = \frac{src0.x}{src1.x}
1228*61046927SAndroid Build Coastguard Worker
1229*61046927SAndroid Build Coastguard Worker      dst.y = \frac{src0.y}{src1.y}
1230*61046927SAndroid Build Coastguard Worker
1231*61046927SAndroid Build Coastguard Worker      dst.z = \frac{src0.z}{src1.z}
1232*61046927SAndroid Build Coastguard Worker
1233*61046927SAndroid Build Coastguard Worker      dst.w = \frac{src0.w}{src1.w}
1234*61046927SAndroid Build Coastguard Worker
1235*61046927SAndroid Build Coastguard Worker
1236*61046927SAndroid Build Coastguard Worker.. opcode:: UMOD - Unsigned Integer Remainder
1237*61046927SAndroid Build Coastguard Worker
1238*61046927SAndroid Build Coastguard Worker   If *src1* is zero, ``0xffffffff`` is returned.
1239*61046927SAndroid Build Coastguard Worker
1240*61046927SAndroid Build Coastguard Worker   .. math::
1241*61046927SAndroid Build Coastguard Worker
1242*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \bmod src1.x
1243*61046927SAndroid Build Coastguard Worker
1244*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \bmod src1.y
1245*61046927SAndroid Build Coastguard Worker
1246*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \bmod src1.z
1247*61046927SAndroid Build Coastguard Worker
1248*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \bmod src1.w
1249*61046927SAndroid Build Coastguard Worker
1250*61046927SAndroid Build Coastguard Worker
1251*61046927SAndroid Build Coastguard Worker.. opcode:: NOT - Bitwise Not
1252*61046927SAndroid Build Coastguard Worker
1253*61046927SAndroid Build Coastguard Worker   .. math::
1254*61046927SAndroid Build Coastguard Worker
1255*61046927SAndroid Build Coastguard Worker      dst.x = \sim src.x
1256*61046927SAndroid Build Coastguard Worker
1257*61046927SAndroid Build Coastguard Worker      dst.y = \sim src.y
1258*61046927SAndroid Build Coastguard Worker
1259*61046927SAndroid Build Coastguard Worker      dst.z = \sim src.z
1260*61046927SAndroid Build Coastguard Worker
1261*61046927SAndroid Build Coastguard Worker      dst.w = \sim src.w
1262*61046927SAndroid Build Coastguard Worker
1263*61046927SAndroid Build Coastguard Worker
1264*61046927SAndroid Build Coastguard Worker.. opcode:: AND - Bitwise And
1265*61046927SAndroid Build Coastguard Worker
1266*61046927SAndroid Build Coastguard Worker   .. math::
1267*61046927SAndroid Build Coastguard Worker
1268*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \& src1.x
1269*61046927SAndroid Build Coastguard Worker
1270*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \& src1.y
1271*61046927SAndroid Build Coastguard Worker
1272*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \& src1.z
1273*61046927SAndroid Build Coastguard Worker
1274*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \& src1.w
1275*61046927SAndroid Build Coastguard Worker
1276*61046927SAndroid Build Coastguard Worker
1277*61046927SAndroid Build Coastguard Worker.. opcode:: OR - Bitwise Or
1278*61046927SAndroid Build Coastguard Worker
1279*61046927SAndroid Build Coastguard Worker   .. math::
1280*61046927SAndroid Build Coastguard Worker
1281*61046927SAndroid Build Coastguard Worker      dst.x = src0.x | src1.x
1282*61046927SAndroid Build Coastguard Worker
1283*61046927SAndroid Build Coastguard Worker      dst.y = src0.y | src1.y
1284*61046927SAndroid Build Coastguard Worker
1285*61046927SAndroid Build Coastguard Worker      dst.z = src0.z | src1.z
1286*61046927SAndroid Build Coastguard Worker
1287*61046927SAndroid Build Coastguard Worker      dst.w = src0.w | src1.w
1288*61046927SAndroid Build Coastguard Worker
1289*61046927SAndroid Build Coastguard Worker
1290*61046927SAndroid Build Coastguard Worker.. opcode:: XOR - Bitwise Xor
1291*61046927SAndroid Build Coastguard Worker
1292*61046927SAndroid Build Coastguard Worker   .. math::
1293*61046927SAndroid Build Coastguard Worker
1294*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \oplus src1.x
1295*61046927SAndroid Build Coastguard Worker
1296*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \oplus src1.y
1297*61046927SAndroid Build Coastguard Worker
1298*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \oplus src1.z
1299*61046927SAndroid Build Coastguard Worker
1300*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \oplus src1.w
1301*61046927SAndroid Build Coastguard Worker
1302*61046927SAndroid Build Coastguard Worker
1303*61046927SAndroid Build Coastguard Worker.. opcode:: IMAX - Maximum of Signed Integers
1304*61046927SAndroid Build Coastguard Worker
1305*61046927SAndroid Build Coastguard Worker   .. math::
1306*61046927SAndroid Build Coastguard Worker
1307*61046927SAndroid Build Coastguard Worker      dst.x = max(src0.x, src1.x)
1308*61046927SAndroid Build Coastguard Worker
1309*61046927SAndroid Build Coastguard Worker      dst.y = max(src0.y, src1.y)
1310*61046927SAndroid Build Coastguard Worker
1311*61046927SAndroid Build Coastguard Worker      dst.z = max(src0.z, src1.z)
1312*61046927SAndroid Build Coastguard Worker
1313*61046927SAndroid Build Coastguard Worker      dst.w = max(src0.w, src1.w)
1314*61046927SAndroid Build Coastguard Worker
1315*61046927SAndroid Build Coastguard Worker
1316*61046927SAndroid Build Coastguard Worker.. opcode:: UMAX - Maximum of Unsigned Integers
1317*61046927SAndroid Build Coastguard Worker
1318*61046927SAndroid Build Coastguard Worker   .. math::
1319*61046927SAndroid Build Coastguard Worker
1320*61046927SAndroid Build Coastguard Worker      dst.x = max(src0.x, src1.x)
1321*61046927SAndroid Build Coastguard Worker
1322*61046927SAndroid Build Coastguard Worker      dst.y = max(src0.y, src1.y)
1323*61046927SAndroid Build Coastguard Worker
1324*61046927SAndroid Build Coastguard Worker      dst.z = max(src0.z, src1.z)
1325*61046927SAndroid Build Coastguard Worker
1326*61046927SAndroid Build Coastguard Worker      dst.w = max(src0.w, src1.w)
1327*61046927SAndroid Build Coastguard Worker
1328*61046927SAndroid Build Coastguard Worker
1329*61046927SAndroid Build Coastguard Worker.. opcode:: IMIN - Minimum of Signed Integers
1330*61046927SAndroid Build Coastguard Worker
1331*61046927SAndroid Build Coastguard Worker   .. math::
1332*61046927SAndroid Build Coastguard Worker
1333*61046927SAndroid Build Coastguard Worker      dst.x = min(src0.x, src1.x)
1334*61046927SAndroid Build Coastguard Worker
1335*61046927SAndroid Build Coastguard Worker      dst.y = min(src0.y, src1.y)
1336*61046927SAndroid Build Coastguard Worker
1337*61046927SAndroid Build Coastguard Worker      dst.z = min(src0.z, src1.z)
1338*61046927SAndroid Build Coastguard Worker
1339*61046927SAndroid Build Coastguard Worker      dst.w = min(src0.w, src1.w)
1340*61046927SAndroid Build Coastguard Worker
1341*61046927SAndroid Build Coastguard Worker
1342*61046927SAndroid Build Coastguard Worker.. opcode:: UMIN - Minimum of Unsigned Integers
1343*61046927SAndroid Build Coastguard Worker
1344*61046927SAndroid Build Coastguard Worker   .. math::
1345*61046927SAndroid Build Coastguard Worker
1346*61046927SAndroid Build Coastguard Worker      dst.x = min(src0.x, src1.x)
1347*61046927SAndroid Build Coastguard Worker
1348*61046927SAndroid Build Coastguard Worker      dst.y = min(src0.y, src1.y)
1349*61046927SAndroid Build Coastguard Worker
1350*61046927SAndroid Build Coastguard Worker      dst.z = min(src0.z, src1.z)
1351*61046927SAndroid Build Coastguard Worker
1352*61046927SAndroid Build Coastguard Worker      dst.w = min(src0.w, src1.w)
1353*61046927SAndroid Build Coastguard Worker
1354*61046927SAndroid Build Coastguard Worker
1355*61046927SAndroid Build Coastguard Worker.. opcode:: SHL - Shift Left
1356*61046927SAndroid Build Coastguard Worker
1357*61046927SAndroid Build Coastguard Worker   The shift count is masked with ``0x1f`` before the shift is applied.
1358*61046927SAndroid Build Coastguard Worker
1359*61046927SAndroid Build Coastguard Worker   .. math::
1360*61046927SAndroid Build Coastguard Worker
1361*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \ll (0x1f \& src1.x)
1362*61046927SAndroid Build Coastguard Worker
1363*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \ll (0x1f \& src1.y)
1364*61046927SAndroid Build Coastguard Worker
1365*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \ll (0x1f \& src1.z)
1366*61046927SAndroid Build Coastguard Worker
1367*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \ll (0x1f \& src1.w)
1368*61046927SAndroid Build Coastguard Worker
1369*61046927SAndroid Build Coastguard Worker
1370*61046927SAndroid Build Coastguard Worker.. opcode:: ISHR - Arithmetic Shift Right (of Signed Integer)
1371*61046927SAndroid Build Coastguard Worker
1372*61046927SAndroid Build Coastguard Worker   The shift count is masked with ``0x1f`` before the shift is applied.
1373*61046927SAndroid Build Coastguard Worker
1374*61046927SAndroid Build Coastguard Worker   .. math::
1375*61046927SAndroid Build Coastguard Worker
1376*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \gg (0x1f \& src1.x)
1377*61046927SAndroid Build Coastguard Worker
1378*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \gg (0x1f \& src1.y)
1379*61046927SAndroid Build Coastguard Worker
1380*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \gg (0x1f \& src1.z)
1381*61046927SAndroid Build Coastguard Worker
1382*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \gg (0x1f \& src1.w)
1383*61046927SAndroid Build Coastguard Worker
1384*61046927SAndroid Build Coastguard Worker
1385*61046927SAndroid Build Coastguard Worker.. opcode:: USHR - Logical Shift Right
1386*61046927SAndroid Build Coastguard Worker
1387*61046927SAndroid Build Coastguard Worker   The shift count is masked with ``0x1f`` before the shift is applied.
1388*61046927SAndroid Build Coastguard Worker
1389*61046927SAndroid Build Coastguard Worker   .. math::
1390*61046927SAndroid Build Coastguard Worker
1391*61046927SAndroid Build Coastguard Worker      dst.x = src0.x \gg (unsigned) (0x1f \& src1.x)
1392*61046927SAndroid Build Coastguard Worker
1393*61046927SAndroid Build Coastguard Worker      dst.y = src0.y \gg (unsigned) (0x1f \& src1.y)
1394*61046927SAndroid Build Coastguard Worker
1395*61046927SAndroid Build Coastguard Worker      dst.z = src0.z \gg (unsigned) (0x1f \& src1.z)
1396*61046927SAndroid Build Coastguard Worker
1397*61046927SAndroid Build Coastguard Worker      dst.w = src0.w \gg (unsigned) (0x1f \& src1.w)
1398*61046927SAndroid Build Coastguard Worker
1399*61046927SAndroid Build Coastguard Worker
1400*61046927SAndroid Build Coastguard Worker.. opcode:: UCMP - Integer Conditional Move
1401*61046927SAndroid Build Coastguard Worker
1402*61046927SAndroid Build Coastguard Worker   .. math::
1403*61046927SAndroid Build Coastguard Worker
1404*61046927SAndroid Build Coastguard Worker      dst.x = src0.x ? src1.x : src2.x
1405*61046927SAndroid Build Coastguard Worker
1406*61046927SAndroid Build Coastguard Worker      dst.y = src0.y ? src1.y : src2.y
1407*61046927SAndroid Build Coastguard Worker
1408*61046927SAndroid Build Coastguard Worker      dst.z = src0.z ? src1.z : src2.z
1409*61046927SAndroid Build Coastguard Worker
1410*61046927SAndroid Build Coastguard Worker      dst.w = src0.w ? src1.w : src2.w
1411*61046927SAndroid Build Coastguard Worker
1412*61046927SAndroid Build Coastguard Worker
1413*61046927SAndroid Build Coastguard Worker
1414*61046927SAndroid Build Coastguard Worker.. opcode:: ISSG - Integer Set Sign
1415*61046927SAndroid Build Coastguard Worker
1416*61046927SAndroid Build Coastguard Worker   .. math::
1417*61046927SAndroid Build Coastguard Worker
1418*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x < 0) ? -1 : (src0.x > 0) ? 1 : 0
1419*61046927SAndroid Build Coastguard Worker
1420*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y < 0) ? -1 : (src0.y > 0) ? 1 : 0
1421*61046927SAndroid Build Coastguard Worker
1422*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z < 0) ? -1 : (src0.z > 0) ? 1 : 0
1423*61046927SAndroid Build Coastguard Worker
1424*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w < 0) ? -1 : (src0.w > 0) ? 1 : 0
1425*61046927SAndroid Build Coastguard Worker
1426*61046927SAndroid Build Coastguard Worker
1427*61046927SAndroid Build Coastguard Worker
1428*61046927SAndroid Build Coastguard Worker.. opcode:: FSLT - Float Set On Less Than (ordered)
1429*61046927SAndroid Build Coastguard Worker
1430*61046927SAndroid Build Coastguard Worker   Same comparison as SLT but returns integer instead of 1.0/0.0 float
1431*61046927SAndroid Build Coastguard Worker
1432*61046927SAndroid Build Coastguard Worker   .. math::
1433*61046927SAndroid Build Coastguard Worker
1434*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x < src1.x) ? \sim 0 : 0
1435*61046927SAndroid Build Coastguard Worker
1436*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y < src1.y) ? \sim 0 : 0
1437*61046927SAndroid Build Coastguard Worker
1438*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z < src1.z) ? \sim 0 : 0
1439*61046927SAndroid Build Coastguard Worker
1440*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w < src1.w) ? \sim 0 : 0
1441*61046927SAndroid Build Coastguard Worker
1442*61046927SAndroid Build Coastguard Worker
1443*61046927SAndroid Build Coastguard Worker.. opcode:: ISLT - Signed Integer Set On Less Than
1444*61046927SAndroid Build Coastguard Worker
1445*61046927SAndroid Build Coastguard Worker   .. math::
1446*61046927SAndroid Build Coastguard Worker
1447*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x < src1.x) ? \sim 0 : 0
1448*61046927SAndroid Build Coastguard Worker
1449*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y < src1.y) ? \sim 0 : 0
1450*61046927SAndroid Build Coastguard Worker
1451*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z < src1.z) ? \sim 0 : 0
1452*61046927SAndroid Build Coastguard Worker
1453*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w < src1.w) ? \sim 0 : 0
1454*61046927SAndroid Build Coastguard Worker
1455*61046927SAndroid Build Coastguard Worker
1456*61046927SAndroid Build Coastguard Worker.. opcode:: USLT - Unsigned Integer Set On Less Than
1457*61046927SAndroid Build Coastguard Worker
1458*61046927SAndroid Build Coastguard Worker   .. math::
1459*61046927SAndroid Build Coastguard Worker
1460*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x < src1.x) ? \sim 0 : 0
1461*61046927SAndroid Build Coastguard Worker
1462*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y < src1.y) ? \sim 0 : 0
1463*61046927SAndroid Build Coastguard Worker
1464*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z < src1.z) ? \sim 0 : 0
1465*61046927SAndroid Build Coastguard Worker
1466*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w < src1.w) ? \sim 0 : 0
1467*61046927SAndroid Build Coastguard Worker
1468*61046927SAndroid Build Coastguard Worker
1469*61046927SAndroid Build Coastguard Worker.. opcode:: FSGE - Float Set On Greater Equal Than (ordered)
1470*61046927SAndroid Build Coastguard Worker
1471*61046927SAndroid Build Coastguard Worker   Same comparison as SGE but returns integer instead of 1.0/0.0 float
1472*61046927SAndroid Build Coastguard Worker
1473*61046927SAndroid Build Coastguard Worker   .. math::
1474*61046927SAndroid Build Coastguard Worker
1475*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x >= src1.x) ? \sim 0 : 0
1476*61046927SAndroid Build Coastguard Worker
1477*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y >= src1.y) ? \sim 0 : 0
1478*61046927SAndroid Build Coastguard Worker
1479*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z >= src1.z) ? \sim 0 : 0
1480*61046927SAndroid Build Coastguard Worker
1481*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w >= src1.w) ? \sim 0 : 0
1482*61046927SAndroid Build Coastguard Worker
1483*61046927SAndroid Build Coastguard Worker
1484*61046927SAndroid Build Coastguard Worker.. opcode:: ISGE - Signed Integer Set On Greater Equal Than
1485*61046927SAndroid Build Coastguard Worker
1486*61046927SAndroid Build Coastguard Worker   .. math::
1487*61046927SAndroid Build Coastguard Worker
1488*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x >= src1.x) ? \sim 0 : 0
1489*61046927SAndroid Build Coastguard Worker
1490*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y >= src1.y) ? \sim 0 : 0
1491*61046927SAndroid Build Coastguard Worker
1492*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z >= src1.z) ? \sim 0 : 0
1493*61046927SAndroid Build Coastguard Worker
1494*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w >= src1.w) ? \sim 0 : 0
1495*61046927SAndroid Build Coastguard Worker
1496*61046927SAndroid Build Coastguard Worker
1497*61046927SAndroid Build Coastguard Worker.. opcode:: USGE - Unsigned Integer Set On Greater Equal Than
1498*61046927SAndroid Build Coastguard Worker
1499*61046927SAndroid Build Coastguard Worker   .. math::
1500*61046927SAndroid Build Coastguard Worker
1501*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x >= src1.x) ? \sim 0 : 0
1502*61046927SAndroid Build Coastguard Worker
1503*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y >= src1.y) ? \sim 0 : 0
1504*61046927SAndroid Build Coastguard Worker
1505*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z >= src1.z) ? \sim 0 : 0
1506*61046927SAndroid Build Coastguard Worker
1507*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w >= src1.w) ? \sim 0 : 0
1508*61046927SAndroid Build Coastguard Worker
1509*61046927SAndroid Build Coastguard Worker
1510*61046927SAndroid Build Coastguard Worker.. opcode:: FSEQ - Float Set On Equal (ordered)
1511*61046927SAndroid Build Coastguard Worker
1512*61046927SAndroid Build Coastguard Worker   Same comparison as SEQ but returns integer instead of 1.0/0.0 float
1513*61046927SAndroid Build Coastguard Worker
1514*61046927SAndroid Build Coastguard Worker   .. math::
1515*61046927SAndroid Build Coastguard Worker
1516*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x == src1.x) ? \sim 0 : 0
1517*61046927SAndroid Build Coastguard Worker
1518*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y == src1.y) ? \sim 0 : 0
1519*61046927SAndroid Build Coastguard Worker
1520*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z == src1.z) ? \sim 0 : 0
1521*61046927SAndroid Build Coastguard Worker
1522*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w == src1.w) ? \sim 0 : 0
1523*61046927SAndroid Build Coastguard Worker
1524*61046927SAndroid Build Coastguard Worker
1525*61046927SAndroid Build Coastguard Worker.. opcode:: USEQ - Integer Set On Equal
1526*61046927SAndroid Build Coastguard Worker
1527*61046927SAndroid Build Coastguard Worker   .. math::
1528*61046927SAndroid Build Coastguard Worker
1529*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x == src1.x) ? \sim 0 : 0
1530*61046927SAndroid Build Coastguard Worker
1531*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y == src1.y) ? \sim 0 : 0
1532*61046927SAndroid Build Coastguard Worker
1533*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z == src1.z) ? \sim 0 : 0
1534*61046927SAndroid Build Coastguard Worker
1535*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w == src1.w) ? \sim 0 : 0
1536*61046927SAndroid Build Coastguard Worker
1537*61046927SAndroid Build Coastguard Worker
1538*61046927SAndroid Build Coastguard Worker.. opcode:: FSNE - Float Set On Not Equal (unordered)
1539*61046927SAndroid Build Coastguard Worker
1540*61046927SAndroid Build Coastguard Worker   Same comparison as SNE but returns integer instead of 1.0/0.0 float
1541*61046927SAndroid Build Coastguard Worker
1542*61046927SAndroid Build Coastguard Worker   .. math::
1543*61046927SAndroid Build Coastguard Worker
1544*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x != src1.x) ? \sim 0 : 0
1545*61046927SAndroid Build Coastguard Worker
1546*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y != src1.y) ? \sim 0 : 0
1547*61046927SAndroid Build Coastguard Worker
1548*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z != src1.z) ? \sim 0 : 0
1549*61046927SAndroid Build Coastguard Worker
1550*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w != src1.w) ? \sim 0 : 0
1551*61046927SAndroid Build Coastguard Worker
1552*61046927SAndroid Build Coastguard Worker
1553*61046927SAndroid Build Coastguard Worker.. opcode:: USNE - Integer Set On Not Equal
1554*61046927SAndroid Build Coastguard Worker
1555*61046927SAndroid Build Coastguard Worker   .. math::
1556*61046927SAndroid Build Coastguard Worker
1557*61046927SAndroid Build Coastguard Worker      dst.x = (src0.x != src1.x) ? \sim 0 : 0
1558*61046927SAndroid Build Coastguard Worker
1559*61046927SAndroid Build Coastguard Worker      dst.y = (src0.y != src1.y) ? \sim 0 : 0
1560*61046927SAndroid Build Coastguard Worker
1561*61046927SAndroid Build Coastguard Worker      dst.z = (src0.z != src1.z) ? \sim 0 : 0
1562*61046927SAndroid Build Coastguard Worker
1563*61046927SAndroid Build Coastguard Worker      dst.w = (src0.w != src1.w) ? \sim 0 : 0
1564*61046927SAndroid Build Coastguard Worker
1565*61046927SAndroid Build Coastguard Worker
1566*61046927SAndroid Build Coastguard Worker.. opcode:: INEG - Integer Negate
1567*61046927SAndroid Build Coastguard Worker
1568*61046927SAndroid Build Coastguard Worker  Two's complement.
1569*61046927SAndroid Build Coastguard Worker
1570*61046927SAndroid Build Coastguard Worker   .. math::
1571*61046927SAndroid Build Coastguard Worker
1572*61046927SAndroid Build Coastguard Worker      dst.x = -src.x
1573*61046927SAndroid Build Coastguard Worker
1574*61046927SAndroid Build Coastguard Worker      dst.y = -src.y
1575*61046927SAndroid Build Coastguard Worker
1576*61046927SAndroid Build Coastguard Worker      dst.z = -src.z
1577*61046927SAndroid Build Coastguard Worker
1578*61046927SAndroid Build Coastguard Worker      dst.w = -src.w
1579*61046927SAndroid Build Coastguard Worker
1580*61046927SAndroid Build Coastguard Worker
1581*61046927SAndroid Build Coastguard Worker.. opcode:: IABS - Integer Absolute Value
1582*61046927SAndroid Build Coastguard Worker
1583*61046927SAndroid Build Coastguard Worker   .. math::
1584*61046927SAndroid Build Coastguard Worker
1585*61046927SAndroid Build Coastguard Worker      dst.x = |src.x|
1586*61046927SAndroid Build Coastguard Worker
1587*61046927SAndroid Build Coastguard Worker      dst.y = |src.y|
1588*61046927SAndroid Build Coastguard Worker
1589*61046927SAndroid Build Coastguard Worker      dst.z = |src.z|
1590*61046927SAndroid Build Coastguard Worker
1591*61046927SAndroid Build Coastguard Worker      dst.w = |src.w|
1592*61046927SAndroid Build Coastguard Worker
1593*61046927SAndroid Build Coastguard WorkerBitwise ISA
1594*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^
1595*61046927SAndroid Build Coastguard WorkerThese opcodes are used for bit-level manipulation of integers.
1596*61046927SAndroid Build Coastguard Worker
1597*61046927SAndroid Build Coastguard Worker.. opcode:: IBFE - Signed Bitfield Extract
1598*61046927SAndroid Build Coastguard Worker
1599*61046927SAndroid Build Coastguard Worker   Like GLSL bitfieldExtract. Extracts a set of bits from the input, and
1600*61046927SAndroid Build Coastguard Worker   sign-extends them if the high bit of the extracted window is set.
1601*61046927SAndroid Build Coastguard Worker
1602*61046927SAndroid Build Coastguard Worker   Pseudocode::
1603*61046927SAndroid Build Coastguard Worker
1604*61046927SAndroid Build Coastguard Worker      def ibfe(value, offset, bits):
1605*61046927SAndroid Build Coastguard Worker         if offset < 0 or bits < 0 or offset + bits > 32:
1606*61046927SAndroid Build Coastguard Worker            return undefined
1607*61046927SAndroid Build Coastguard Worker         if bits == 0: return 0
1608*61046927SAndroid Build Coastguard Worker         # Note: >> sign-extends
1609*61046927SAndroid Build Coastguard Worker         return (value << (32 - offset - bits)) >> (32 - bits)
1610*61046927SAndroid Build Coastguard Worker
1611*61046927SAndroid Build Coastguard Worker.. opcode:: UBFE - Unsigned Bitfield Extract
1612*61046927SAndroid Build Coastguard Worker
1613*61046927SAndroid Build Coastguard Worker   Like GLSL bitfieldExtract. Extracts a set of bits from the input, without
1614*61046927SAndroid Build Coastguard Worker   any sign-extension.
1615*61046927SAndroid Build Coastguard Worker
1616*61046927SAndroid Build Coastguard Worker   Pseudocode::
1617*61046927SAndroid Build Coastguard Worker
1618*61046927SAndroid Build Coastguard Worker      def ubfe(value, offset, bits):
1619*61046927SAndroid Build Coastguard Worker         if offset < 0 or bits < 0 or offset + bits > 32:
1620*61046927SAndroid Build Coastguard Worker            return undefined
1621*61046927SAndroid Build Coastguard Worker         if bits == 0: return 0
1622*61046927SAndroid Build Coastguard Worker         # Note: >> does not sign-extend
1623*61046927SAndroid Build Coastguard Worker         return (value << (32 - offset - bits)) >> (32 - bits)
1624*61046927SAndroid Build Coastguard Worker
1625*61046927SAndroid Build Coastguard Worker.. opcode:: BFI - Bitfield Insert
1626*61046927SAndroid Build Coastguard Worker
1627*61046927SAndroid Build Coastguard Worker   Like GLSL bitfieldInsert. Replaces a bit region of 'base' with the low bits
1628*61046927SAndroid Build Coastguard Worker   of 'insert'.
1629*61046927SAndroid Build Coastguard Worker
1630*61046927SAndroid Build Coastguard Worker   Pseudocode::
1631*61046927SAndroid Build Coastguard Worker
1632*61046927SAndroid Build Coastguard Worker      def bfi(base, insert, offset, bits):
1633*61046927SAndroid Build Coastguard Worker         if offset < 0 or bits < 0 or offset + bits > 32:
1634*61046927SAndroid Build Coastguard Worker            return undefined
1635*61046927SAndroid Build Coastguard Worker         # << defined such that mask == ~0 when bits == 32, offset == 0
1636*61046927SAndroid Build Coastguard Worker         mask = ((1 << bits) - 1) << offset
1637*61046927SAndroid Build Coastguard Worker         return ((insert << offset) & mask) | (base & ~mask)
1638*61046927SAndroid Build Coastguard Worker
1639*61046927SAndroid Build Coastguard Worker.. opcode:: BREV - Bitfield Reverse
1640*61046927SAndroid Build Coastguard Worker
1641*61046927SAndroid Build Coastguard Worker   See SM5 instruction BFREV. Reverses the bits of the argument.
1642*61046927SAndroid Build Coastguard Worker
1643*61046927SAndroid Build Coastguard Worker.. opcode:: POPC - Population Count
1644*61046927SAndroid Build Coastguard Worker
1645*61046927SAndroid Build Coastguard Worker   See SM5 instruction COUNTBITS. Counts the number of set bits in the argument.
1646*61046927SAndroid Build Coastguard Worker
1647*61046927SAndroid Build Coastguard Worker.. opcode:: LSB - Index of lowest set bit
1648*61046927SAndroid Build Coastguard Worker
1649*61046927SAndroid Build Coastguard Worker   See SM5 instruction FIRSTBIT_LO. Computes the 0-based index of the first set
1650*61046927SAndroid Build Coastguard Worker   bit of the argument. Returns -1 if none are set.
1651*61046927SAndroid Build Coastguard Worker
1652*61046927SAndroid Build Coastguard Worker.. opcode:: IMSB - Index of highest non-sign bit
1653*61046927SAndroid Build Coastguard Worker
1654*61046927SAndroid Build Coastguard Worker   See SM5 instruction FIRSTBIT_SHI. Computes the 0-based index of the highest
1655*61046927SAndroid Build Coastguard Worker   non-sign bit of the argument (i.e. highest 0 bit for negative numbers,
1656*61046927SAndroid Build Coastguard Worker   highest 1 bit for positive numbers). Returns -1 if all bits are the same
1657*61046927SAndroid Build Coastguard Worker   (i.e. for inputs 0 and -1).
1658*61046927SAndroid Build Coastguard Worker
1659*61046927SAndroid Build Coastguard Worker.. opcode:: UMSB - Index of highest set bit
1660*61046927SAndroid Build Coastguard Worker
1661*61046927SAndroid Build Coastguard Worker   See SM5 instruction FIRSTBIT_HI. Computes the 0-based index of the highest
1662*61046927SAndroid Build Coastguard Worker   set bit of the argument. Returns -1 if none are set.
1663*61046927SAndroid Build Coastguard Worker
1664*61046927SAndroid Build Coastguard WorkerGeometry ISA
1665*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1666*61046927SAndroid Build Coastguard Worker
1667*61046927SAndroid Build Coastguard WorkerThese opcodes are only supported in geometry shaders; they have no meaning
1668*61046927SAndroid Build Coastguard Workerin any other type of shader.
1669*61046927SAndroid Build Coastguard Worker
1670*61046927SAndroid Build Coastguard Worker.. opcode:: EMIT - Emit
1671*61046927SAndroid Build Coastguard Worker
1672*61046927SAndroid Build Coastguard Worker   Generate a new vertex for the current primitive into the specified vertex
1673*61046927SAndroid Build Coastguard Worker   stream using the values in the output registers.
1674*61046927SAndroid Build Coastguard Worker
1675*61046927SAndroid Build Coastguard Worker
1676*61046927SAndroid Build Coastguard Worker.. opcode:: ENDPRIM - End Primitive
1677*61046927SAndroid Build Coastguard Worker
1678*61046927SAndroid Build Coastguard Worker   Complete the current primitive in the specified vertex stream (consisting of
1679*61046927SAndroid Build Coastguard Worker   the emitted vertices), and start a new one.
1680*61046927SAndroid Build Coastguard Worker
1681*61046927SAndroid Build Coastguard Worker
1682*61046927SAndroid Build Coastguard WorkerGLSL ISA
1683*61046927SAndroid Build Coastguard Worker^^^^^^^^^^
1684*61046927SAndroid Build Coastguard Worker
1685*61046927SAndroid Build Coastguard WorkerThese opcodes are part of :term:`GLSL`'s opcode set. Support for these
1686*61046927SAndroid Build Coastguard Workeropcodes is determined by a special capability bit, ``GLSL``.
1687*61046927SAndroid Build Coastguard WorkerSome require glsl version 1.30 (UIF/SWITCH/CASE/DEFAULT/ENDSWITCH).
1688*61046927SAndroid Build Coastguard Worker
1689*61046927SAndroid Build Coastguard Worker.. opcode:: CAL - Subroutine Call
1690*61046927SAndroid Build Coastguard Worker
1691*61046927SAndroid Build Coastguard Worker   Pseudocode::
1692*61046927SAndroid Build Coastguard Worker
1693*61046927SAndroid Build Coastguard Worker      push(pc)
1694*61046927SAndroid Build Coastguard Worker      pc = target
1695*61046927SAndroid Build Coastguard Worker
1696*61046927SAndroid Build Coastguard Worker
1697*61046927SAndroid Build Coastguard Worker.. opcode:: RET - Subroutine Call Return
1698*61046927SAndroid Build Coastguard Worker
1699*61046927SAndroid Build Coastguard Worker   Pseudocode::
1700*61046927SAndroid Build Coastguard Worker
1701*61046927SAndroid Build Coastguard Worker      pc = pop()
1702*61046927SAndroid Build Coastguard Worker
1703*61046927SAndroid Build Coastguard Worker
1704*61046927SAndroid Build Coastguard Worker.. opcode:: CONT - Continue
1705*61046927SAndroid Build Coastguard Worker
1706*61046927SAndroid Build Coastguard Worker   Unconditionally moves the point of execution to the instruction after the
1707*61046927SAndroid Build Coastguard Worker   last BGNLOOP. The instruction must appear within a BGNLOOP/ENDLOOP.
1708*61046927SAndroid Build Coastguard Worker
1709*61046927SAndroid Build Coastguard Worker.. note::
1710*61046927SAndroid Build Coastguard Worker
1711*61046927SAndroid Build Coastguard Worker   Support for CONT is determined by a special capability bit,
1712*61046927SAndroid Build Coastguard Worker   ``TGSI_CONT_SUPPORTED``. See :ref:`Screen` for more information.
1713*61046927SAndroid Build Coastguard Worker
1714*61046927SAndroid Build Coastguard Worker
1715*61046927SAndroid Build Coastguard Worker.. opcode:: BGNLOOP - Begin a Loop
1716*61046927SAndroid Build Coastguard Worker
1717*61046927SAndroid Build Coastguard Worker   Start a loop. Must have a matching ENDLOOP.
1718*61046927SAndroid Build Coastguard Worker
1719*61046927SAndroid Build Coastguard Worker
1720*61046927SAndroid Build Coastguard Worker.. opcode:: BGNSUB - Begin Subroutine
1721*61046927SAndroid Build Coastguard Worker
1722*61046927SAndroid Build Coastguard Worker   Starts definition of a subroutine. Must have a matching ENDSUB.
1723*61046927SAndroid Build Coastguard Worker
1724*61046927SAndroid Build Coastguard Worker
1725*61046927SAndroid Build Coastguard Worker.. opcode:: ENDLOOP - End a Loop
1726*61046927SAndroid Build Coastguard Worker
1727*61046927SAndroid Build Coastguard Worker   End a loop started with BGNLOOP.
1728*61046927SAndroid Build Coastguard Worker
1729*61046927SAndroid Build Coastguard Worker
1730*61046927SAndroid Build Coastguard Worker.. opcode:: ENDSUB - End Subroutine
1731*61046927SAndroid Build Coastguard Worker
1732*61046927SAndroid Build Coastguard Worker   Ends definition of a subroutine.
1733*61046927SAndroid Build Coastguard Worker
1734*61046927SAndroid Build Coastguard Worker
1735*61046927SAndroid Build Coastguard Worker.. opcode:: NOP - No Operation
1736*61046927SAndroid Build Coastguard Worker
1737*61046927SAndroid Build Coastguard Worker   Do nothing.
1738*61046927SAndroid Build Coastguard Worker
1739*61046927SAndroid Build Coastguard Worker
1740*61046927SAndroid Build Coastguard Worker.. opcode:: BRK - Break
1741*61046927SAndroid Build Coastguard Worker
1742*61046927SAndroid Build Coastguard Worker   Unconditionally moves the point of execution to the instruction after the
1743*61046927SAndroid Build Coastguard Worker   next ENDLOOP or ENDSWITCH. The instruction must appear within a
1744*61046927SAndroid Build Coastguard Worker   BGNLOOP/ENDLOOP or SWITCH/ENDSWITCH.
1745*61046927SAndroid Build Coastguard Worker
1746*61046927SAndroid Build Coastguard Worker
1747*61046927SAndroid Build Coastguard Worker.. opcode:: IF - Float If
1748*61046927SAndroid Build Coastguard Worker
1749*61046927SAndroid Build Coastguard Worker   Start an IF ... ELSE .. ENDIF block.  Condition evaluates to true if
1750*61046927SAndroid Build Coastguard Worker
1751*61046927SAndroid Build Coastguard Worker      *src0.x* != 0.0
1752*61046927SAndroid Build Coastguard Worker
1753*61046927SAndroid Build Coastguard Worker   where *src0.x* is interpreted as a floating point register.
1754*61046927SAndroid Build Coastguard Worker
1755*61046927SAndroid Build Coastguard Worker
1756*61046927SAndroid Build Coastguard Worker.. opcode:: UIF - Bitwise If
1757*61046927SAndroid Build Coastguard Worker
1758*61046927SAndroid Build Coastguard Worker   Start an UIF ... ELSE .. ENDIF block. Condition evaluates to true if
1759*61046927SAndroid Build Coastguard Worker
1760*61046927SAndroid Build Coastguard Worker      *src0.x* != 0
1761*61046927SAndroid Build Coastguard Worker
1762*61046927SAndroid Build Coastguard Worker   where *src0.x* is interpreted as an integer register.
1763*61046927SAndroid Build Coastguard Worker
1764*61046927SAndroid Build Coastguard Worker
1765*61046927SAndroid Build Coastguard Worker.. opcode:: ELSE - Else
1766*61046927SAndroid Build Coastguard Worker
1767*61046927SAndroid Build Coastguard Worker   Starts an else block, after an IF or UIF statement.
1768*61046927SAndroid Build Coastguard Worker
1769*61046927SAndroid Build Coastguard Worker
1770*61046927SAndroid Build Coastguard Worker.. opcode:: ENDIF - End If
1771*61046927SAndroid Build Coastguard Worker
1772*61046927SAndroid Build Coastguard Worker   Ends an IF or UIF block.
1773*61046927SAndroid Build Coastguard Worker
1774*61046927SAndroid Build Coastguard Worker
1775*61046927SAndroid Build Coastguard Worker.. opcode:: SWITCH - Switch
1776*61046927SAndroid Build Coastguard Worker
1777*61046927SAndroid Build Coastguard Worker   Starts a C-style switch expression. The switch consists of one or multiple
1778*61046927SAndroid Build Coastguard Worker   CASE statements, and at most one DEFAULT statement. Execution of a statement
1779*61046927SAndroid Build Coastguard Worker   ends when a BRK is hit, but just like in C falling through to other cases
1780*61046927SAndroid Build Coastguard Worker   without a break is allowed. Similarly, DEFAULT label is allowed anywhere not
1781*61046927SAndroid Build Coastguard Worker   just as last statement, and fallthrough is allowed into/from it.
1782*61046927SAndroid Build Coastguard Worker   CASE *src* arguments are evaluated at bit level against the SWITCH *src* argument.
1783*61046927SAndroid Build Coastguard Worker
1784*61046927SAndroid Build Coastguard Worker   Example::
1785*61046927SAndroid Build Coastguard Worker
1786*61046927SAndroid Build Coastguard Worker      SWITCH src[0].x
1787*61046927SAndroid Build Coastguard Worker      CASE src[0].x
1788*61046927SAndroid Build Coastguard Worker      (some instructions here)
1789*61046927SAndroid Build Coastguard Worker      (optional BRK here)
1790*61046927SAndroid Build Coastguard Worker      DEFAULT
1791*61046927SAndroid Build Coastguard Worker      (some instructions here)
1792*61046927SAndroid Build Coastguard Worker      (optional BRK here)
1793*61046927SAndroid Build Coastguard Worker      CASE src[0].x
1794*61046927SAndroid Build Coastguard Worker      (some instructions here)
1795*61046927SAndroid Build Coastguard Worker      (optional BRK here)
1796*61046927SAndroid Build Coastguard Worker      ENDSWITCH
1797*61046927SAndroid Build Coastguard Worker
1798*61046927SAndroid Build Coastguard Worker
1799*61046927SAndroid Build Coastguard Worker.. opcode:: CASE - Switch case
1800*61046927SAndroid Build Coastguard Worker
1801*61046927SAndroid Build Coastguard Worker   This represents a switch case label. The *src* arg must be an integer immediate.
1802*61046927SAndroid Build Coastguard Worker
1803*61046927SAndroid Build Coastguard Worker
1804*61046927SAndroid Build Coastguard Worker.. opcode:: DEFAULT - Switch default
1805*61046927SAndroid Build Coastguard Worker
1806*61046927SAndroid Build Coastguard Worker   This represents the default case in the switch, which is taken if no other
1807*61046927SAndroid Build Coastguard Worker   case matches.
1808*61046927SAndroid Build Coastguard Worker
1809*61046927SAndroid Build Coastguard Worker
1810*61046927SAndroid Build Coastguard Worker.. opcode:: ENDSWITCH - End of switch
1811*61046927SAndroid Build Coastguard Worker
1812*61046927SAndroid Build Coastguard Worker   Ends a switch expression.
1813*61046927SAndroid Build Coastguard Worker
1814*61046927SAndroid Build Coastguard Worker
1815*61046927SAndroid Build Coastguard WorkerInterpolation ISA
1816*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^
1817*61046927SAndroid Build Coastguard Worker
1818*61046927SAndroid Build Coastguard WorkerThe interpolation instructions allow an input to be interpolated in a
1819*61046927SAndroid Build Coastguard Workerdifferent way than its declaration. This corresponds to the GLSL 4.00
1820*61046927SAndroid Build Coastguard WorkerinterpolateAt* functions. The first argument of each of these must come from
1821*61046927SAndroid Build Coastguard Worker``TGSI_FILE_INPUT``.
1822*61046927SAndroid Build Coastguard Worker
1823*61046927SAndroid Build Coastguard Worker.. opcode:: INTERP_CENTROID - Interpolate at the centroid
1824*61046927SAndroid Build Coastguard Worker
1825*61046927SAndroid Build Coastguard Worker   Interpolates the varying specified by *src0* at the centroid
1826*61046927SAndroid Build Coastguard Worker
1827*61046927SAndroid Build Coastguard Worker.. opcode:: INTERP_SAMPLE - Interpolate at the specified sample
1828*61046927SAndroid Build Coastguard Worker
1829*61046927SAndroid Build Coastguard Worker   Interpolates the varying specified by *src0* at the sample id
1830*61046927SAndroid Build Coastguard Worker   specified by *src1.x* (interpreted as an integer)
1831*61046927SAndroid Build Coastguard Worker
1832*61046927SAndroid Build Coastguard Worker.. opcode:: INTERP_OFFSET - Interpolate at the specified offset
1833*61046927SAndroid Build Coastguard Worker
1834*61046927SAndroid Build Coastguard Worker   Interpolates the varying specified by *src0* at the offset *src1.xy*
1835*61046927SAndroid Build Coastguard Worker   from the pixel center (interpreted as floats)
1836*61046927SAndroid Build Coastguard Worker
1837*61046927SAndroid Build Coastguard Worker
1838*61046927SAndroid Build Coastguard Worker.. _doubleopcodes:
1839*61046927SAndroid Build Coastguard Worker
1840*61046927SAndroid Build Coastguard WorkerDouble ISA
1841*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^
1842*61046927SAndroid Build Coastguard Worker
1843*61046927SAndroid Build Coastguard WorkerThe double-precision opcodes reinterpret four-component vectors into
1844*61046927SAndroid Build Coastguard Workertwo-component vectors with doubled precision in each component.
1845*61046927SAndroid Build Coastguard Worker
1846*61046927SAndroid Build Coastguard Worker.. opcode:: DABS - Absolute
1847*61046927SAndroid Build Coastguard Worker
1848*61046927SAndroid Build Coastguard Worker   .. math::
1849*61046927SAndroid Build Coastguard Worker
1850*61046927SAndroid Build Coastguard Worker      dst.xy = |src0.xy|
1851*61046927SAndroid Build Coastguard Worker
1852*61046927SAndroid Build Coastguard Worker      dst.zw = |src0.zw|
1853*61046927SAndroid Build Coastguard Worker
1854*61046927SAndroid Build Coastguard Worker.. opcode:: DADD - Add
1855*61046927SAndroid Build Coastguard Worker
1856*61046927SAndroid Build Coastguard Worker   .. math::
1857*61046927SAndroid Build Coastguard Worker
1858*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy + src1.xy
1859*61046927SAndroid Build Coastguard Worker
1860*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw + src1.zw
1861*61046927SAndroid Build Coastguard Worker
1862*61046927SAndroid Build Coastguard Worker.. opcode:: DSEQ - Set on Equal
1863*61046927SAndroid Build Coastguard Worker
1864*61046927SAndroid Build Coastguard Worker   .. math::
1865*61046927SAndroid Build Coastguard Worker
1866*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy == src1.xy ? \sim 0 : 0
1867*61046927SAndroid Build Coastguard Worker
1868*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw == src1.zw ? \sim 0 : 0
1869*61046927SAndroid Build Coastguard Worker
1870*61046927SAndroid Build Coastguard Worker.. opcode:: DSNE - Set on Not Equal
1871*61046927SAndroid Build Coastguard Worker
1872*61046927SAndroid Build Coastguard Worker   .. math::
1873*61046927SAndroid Build Coastguard Worker
1874*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy != src1.xy ? \sim 0 : 0
1875*61046927SAndroid Build Coastguard Worker
1876*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw != src1.zw ? \sim 0 : 0
1877*61046927SAndroid Build Coastguard Worker
1878*61046927SAndroid Build Coastguard Worker.. opcode:: DSLT - Set on Less than
1879*61046927SAndroid Build Coastguard Worker
1880*61046927SAndroid Build Coastguard Worker   .. math::
1881*61046927SAndroid Build Coastguard Worker
1882*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy < src1.xy ? \sim 0 : 0
1883*61046927SAndroid Build Coastguard Worker
1884*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw < src1.zw ? \sim 0 : 0
1885*61046927SAndroid Build Coastguard Worker
1886*61046927SAndroid Build Coastguard Worker.. opcode:: DSGE - Set on Greater equal
1887*61046927SAndroid Build Coastguard Worker
1888*61046927SAndroid Build Coastguard Worker   .. math::
1889*61046927SAndroid Build Coastguard Worker
1890*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy >= src1.xy ? \sim 0 : 0
1891*61046927SAndroid Build Coastguard Worker
1892*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw >= src1.zw ? \sim 0 : 0
1893*61046927SAndroid Build Coastguard Worker
1894*61046927SAndroid Build Coastguard Worker.. opcode:: DFRAC - Fraction
1895*61046927SAndroid Build Coastguard Worker
1896*61046927SAndroid Build Coastguard Worker   .. math::
1897*61046927SAndroid Build Coastguard Worker
1898*61046927SAndroid Build Coastguard Worker      dst.xy = src.xy - \lfloor src.xy\rfloor
1899*61046927SAndroid Build Coastguard Worker
1900*61046927SAndroid Build Coastguard Worker      dst.zw = src.zw - \lfloor src.zw\rfloor
1901*61046927SAndroid Build Coastguard Worker
1902*61046927SAndroid Build Coastguard Worker.. opcode:: DTRUNC - Truncate
1903*61046927SAndroid Build Coastguard Worker
1904*61046927SAndroid Build Coastguard Worker   .. math::
1905*61046927SAndroid Build Coastguard Worker
1906*61046927SAndroid Build Coastguard Worker      dst.xy = trunc(src.xy)
1907*61046927SAndroid Build Coastguard Worker
1908*61046927SAndroid Build Coastguard Worker      dst.zw = trunc(src.zw)
1909*61046927SAndroid Build Coastguard Worker
1910*61046927SAndroid Build Coastguard Worker.. opcode:: DCEIL - Ceiling
1911*61046927SAndroid Build Coastguard Worker
1912*61046927SAndroid Build Coastguard Worker   .. math::
1913*61046927SAndroid Build Coastguard Worker
1914*61046927SAndroid Build Coastguard Worker      dst.xy = \lceil src.xy\rceil
1915*61046927SAndroid Build Coastguard Worker
1916*61046927SAndroid Build Coastguard Worker      dst.zw = \lceil src.zw\rceil
1917*61046927SAndroid Build Coastguard Worker
1918*61046927SAndroid Build Coastguard Worker.. opcode:: DFLR - Floor
1919*61046927SAndroid Build Coastguard Worker
1920*61046927SAndroid Build Coastguard Worker   .. math::
1921*61046927SAndroid Build Coastguard Worker
1922*61046927SAndroid Build Coastguard Worker      dst.xy = \lfloor src.xy\rfloor
1923*61046927SAndroid Build Coastguard Worker
1924*61046927SAndroid Build Coastguard Worker      dst.zw = \lfloor src.zw\rfloor
1925*61046927SAndroid Build Coastguard Worker
1926*61046927SAndroid Build Coastguard Worker.. opcode:: DROUND - Fraction
1927*61046927SAndroid Build Coastguard Worker
1928*61046927SAndroid Build Coastguard Worker   .. math::
1929*61046927SAndroid Build Coastguard Worker
1930*61046927SAndroid Build Coastguard Worker      dst.xy = round(src.xy)
1931*61046927SAndroid Build Coastguard Worker
1932*61046927SAndroid Build Coastguard Worker      dst.zw = round(src.zw)
1933*61046927SAndroid Build Coastguard Worker
1934*61046927SAndroid Build Coastguard Worker.. opcode:: DSSG - Set Sign
1935*61046927SAndroid Build Coastguard Worker
1936*61046927SAndroid Build Coastguard Worker   .. math::
1937*61046927SAndroid Build Coastguard Worker
1938*61046927SAndroid Build Coastguard Worker      dst.xy = (src.xy > 0) ? 1.0 : (src.xy < 0) ? -1.0 : 0.0
1939*61046927SAndroid Build Coastguard Worker
1940*61046927SAndroid Build Coastguard Worker      dst.zw = (src.zw > 0) ? 1.0 : (src.zw < 0) ? -1.0 : 0.0
1941*61046927SAndroid Build Coastguard Worker
1942*61046927SAndroid Build Coastguard Worker.. opcode:: DLDEXP - Multiply Number by Integral Power of 2
1943*61046927SAndroid Build Coastguard Worker
1944*61046927SAndroid Build Coastguard Worker   This opcode is the inverse of frexp. The second
1945*61046927SAndroid Build Coastguard Worker   source is an integer.
1946*61046927SAndroid Build Coastguard Worker
1947*61046927SAndroid Build Coastguard Worker   .. math::
1948*61046927SAndroid Build Coastguard Worker
1949*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \times 2^{src1.x}
1950*61046927SAndroid Build Coastguard Worker
1951*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \times 2^{src1.z}
1952*61046927SAndroid Build Coastguard Worker
1953*61046927SAndroid Build Coastguard Worker.. opcode:: DMIN - Minimum
1954*61046927SAndroid Build Coastguard Worker
1955*61046927SAndroid Build Coastguard Worker   .. math::
1956*61046927SAndroid Build Coastguard Worker
1957*61046927SAndroid Build Coastguard Worker      dst.xy = min(src0.xy, src1.xy)
1958*61046927SAndroid Build Coastguard Worker
1959*61046927SAndroid Build Coastguard Worker      dst.zw = min(src0.zw, src1.zw)
1960*61046927SAndroid Build Coastguard Worker
1961*61046927SAndroid Build Coastguard Worker.. opcode:: DMAX - Maximum
1962*61046927SAndroid Build Coastguard Worker
1963*61046927SAndroid Build Coastguard Worker   .. math::
1964*61046927SAndroid Build Coastguard Worker
1965*61046927SAndroid Build Coastguard Worker      dst.xy = max(src0.xy, src1.xy)
1966*61046927SAndroid Build Coastguard Worker
1967*61046927SAndroid Build Coastguard Worker      dst.zw = max(src0.zw, src1.zw)
1968*61046927SAndroid Build Coastguard Worker
1969*61046927SAndroid Build Coastguard Worker.. opcode:: DMUL - Multiply
1970*61046927SAndroid Build Coastguard Worker
1971*61046927SAndroid Build Coastguard Worker   .. math::
1972*61046927SAndroid Build Coastguard Worker
1973*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \times src1.xy
1974*61046927SAndroid Build Coastguard Worker
1975*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \times src1.zw
1976*61046927SAndroid Build Coastguard Worker
1977*61046927SAndroid Build Coastguard Worker
1978*61046927SAndroid Build Coastguard Worker.. opcode:: DMAD - Multiply And Add
1979*61046927SAndroid Build Coastguard Worker
1980*61046927SAndroid Build Coastguard Worker   .. math::
1981*61046927SAndroid Build Coastguard Worker
1982*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \times src1.xy + src2.xy
1983*61046927SAndroid Build Coastguard Worker
1984*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \times src1.zw + src2.zw
1985*61046927SAndroid Build Coastguard Worker
1986*61046927SAndroid Build Coastguard Worker
1987*61046927SAndroid Build Coastguard Worker.. opcode:: DFMA - Fused Multiply-Add
1988*61046927SAndroid Build Coastguard Worker
1989*61046927SAndroid Build Coastguard Worker   Perform a * b + c with no intermediate rounding step.
1990*61046927SAndroid Build Coastguard Worker
1991*61046927SAndroid Build Coastguard Worker   .. math::
1992*61046927SAndroid Build Coastguard Worker
1993*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \times src1.xy + src2.xy
1994*61046927SAndroid Build Coastguard Worker
1995*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \times src1.zw + src2.zw
1996*61046927SAndroid Build Coastguard Worker
1997*61046927SAndroid Build Coastguard Worker
1998*61046927SAndroid Build Coastguard Worker.. opcode:: DDIV - Divide
1999*61046927SAndroid Build Coastguard Worker
2000*61046927SAndroid Build Coastguard Worker   .. math::
2001*61046927SAndroid Build Coastguard Worker
2002*61046927SAndroid Build Coastguard Worker      dst.xy = \frac{src0.xy}{src1.xy}
2003*61046927SAndroid Build Coastguard Worker
2004*61046927SAndroid Build Coastguard Worker      dst.zw = \frac{src0.zw}{src1.zw}
2005*61046927SAndroid Build Coastguard Worker
2006*61046927SAndroid Build Coastguard Worker
2007*61046927SAndroid Build Coastguard Worker.. opcode:: DRCP - Reciprocal
2008*61046927SAndroid Build Coastguard Worker
2009*61046927SAndroid Build Coastguard Worker   .. math::
2010*61046927SAndroid Build Coastguard Worker
2011*61046927SAndroid Build Coastguard Worker      dst.xy = \frac{1}{src.xy}
2012*61046927SAndroid Build Coastguard Worker
2013*61046927SAndroid Build Coastguard Worker      dst.zw = \frac{1}{src.zw}
2014*61046927SAndroid Build Coastguard Worker
2015*61046927SAndroid Build Coastguard Worker.. opcode:: DSQRT - Square Root
2016*61046927SAndroid Build Coastguard Worker
2017*61046927SAndroid Build Coastguard Worker   .. math::
2018*61046927SAndroid Build Coastguard Worker
2019*61046927SAndroid Build Coastguard Worker      dst.xy = \sqrt{src.xy}
2020*61046927SAndroid Build Coastguard Worker
2021*61046927SAndroid Build Coastguard Worker      dst.zw = \sqrt{src.zw}
2022*61046927SAndroid Build Coastguard Worker
2023*61046927SAndroid Build Coastguard Worker.. opcode:: DRSQ - Reciprocal Square Root
2024*61046927SAndroid Build Coastguard Worker
2025*61046927SAndroid Build Coastguard Worker   .. math::
2026*61046927SAndroid Build Coastguard Worker
2027*61046927SAndroid Build Coastguard Worker      dst.xy = \frac{1}{\sqrt{src.xy}}
2028*61046927SAndroid Build Coastguard Worker
2029*61046927SAndroid Build Coastguard Worker      dst.zw = \frac{1}{\sqrt{src.zw}}
2030*61046927SAndroid Build Coastguard Worker
2031*61046927SAndroid Build Coastguard Worker.. opcode:: F2D - Float to Double
2032*61046927SAndroid Build Coastguard Worker
2033*61046927SAndroid Build Coastguard Worker   .. math::
2034*61046927SAndroid Build Coastguard Worker
2035*61046927SAndroid Build Coastguard Worker      dst.xy = double(src0.x)
2036*61046927SAndroid Build Coastguard Worker
2037*61046927SAndroid Build Coastguard Worker      dst.zw = double(src0.y)
2038*61046927SAndroid Build Coastguard Worker
2039*61046927SAndroid Build Coastguard Worker.. opcode:: D2F - Double to Float
2040*61046927SAndroid Build Coastguard Worker
2041*61046927SAndroid Build Coastguard Worker   .. math::
2042*61046927SAndroid Build Coastguard Worker
2043*61046927SAndroid Build Coastguard Worker      dst.x = float(src0.xy)
2044*61046927SAndroid Build Coastguard Worker
2045*61046927SAndroid Build Coastguard Worker      dst.y = float(src0.zw)
2046*61046927SAndroid Build Coastguard Worker
2047*61046927SAndroid Build Coastguard Worker.. opcode:: I2D - Int to Double
2048*61046927SAndroid Build Coastguard Worker
2049*61046927SAndroid Build Coastguard Worker   .. math::
2050*61046927SAndroid Build Coastguard Worker
2051*61046927SAndroid Build Coastguard Worker      dst.xy = double(src0.x)
2052*61046927SAndroid Build Coastguard Worker
2053*61046927SAndroid Build Coastguard Worker      dst.zw = double(src0.y)
2054*61046927SAndroid Build Coastguard Worker
2055*61046927SAndroid Build Coastguard Worker.. opcode:: D2I - Double to Int
2056*61046927SAndroid Build Coastguard Worker
2057*61046927SAndroid Build Coastguard Worker   .. math::
2058*61046927SAndroid Build Coastguard Worker
2059*61046927SAndroid Build Coastguard Worker      dst.x = int(src0.xy)
2060*61046927SAndroid Build Coastguard Worker
2061*61046927SAndroid Build Coastguard Worker      dst.y = int(src0.zw)
2062*61046927SAndroid Build Coastguard Worker
2063*61046927SAndroid Build Coastguard Worker.. opcode:: U2D - Unsigned Int to Double
2064*61046927SAndroid Build Coastguard Worker
2065*61046927SAndroid Build Coastguard Worker   .. math::
2066*61046927SAndroid Build Coastguard Worker
2067*61046927SAndroid Build Coastguard Worker      dst.xy = double(src0.x)
2068*61046927SAndroid Build Coastguard Worker
2069*61046927SAndroid Build Coastguard Worker      dst.zw = double(src0.y)
2070*61046927SAndroid Build Coastguard Worker
2071*61046927SAndroid Build Coastguard Worker.. opcode:: D2U - Double to Unsigned Int
2072*61046927SAndroid Build Coastguard Worker
2073*61046927SAndroid Build Coastguard Worker   .. math::
2074*61046927SAndroid Build Coastguard Worker
2075*61046927SAndroid Build Coastguard Worker      dst.x = unsigned(src0.xy)
2076*61046927SAndroid Build Coastguard Worker
2077*61046927SAndroid Build Coastguard Worker      dst.y = unsigned(src0.zw)
2078*61046927SAndroid Build Coastguard Worker
2079*61046927SAndroid Build Coastguard Worker64-bit Integer ISA
2080*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^
2081*61046927SAndroid Build Coastguard Worker
2082*61046927SAndroid Build Coastguard WorkerThe 64-bit integer opcodes reinterpret four-component vectors into
2083*61046927SAndroid Build Coastguard Workertwo-component vectors with 64-bits in each component.
2084*61046927SAndroid Build Coastguard Worker
2085*61046927SAndroid Build Coastguard Worker.. opcode:: I64ABS - 64-bit Integer Absolute Value
2086*61046927SAndroid Build Coastguard Worker
2087*61046927SAndroid Build Coastguard Worker   .. math::
2088*61046927SAndroid Build Coastguard Worker
2089*61046927SAndroid Build Coastguard Worker      dst.xy = |src0.xy|
2090*61046927SAndroid Build Coastguard Worker
2091*61046927SAndroid Build Coastguard Worker      dst.zw = |src0.zw|
2092*61046927SAndroid Build Coastguard Worker
2093*61046927SAndroid Build Coastguard Worker.. opcode:: I64NEG - 64-bit Integer Negate
2094*61046927SAndroid Build Coastguard Worker
2095*61046927SAndroid Build Coastguard Worker   Two's complement.
2096*61046927SAndroid Build Coastguard Worker
2097*61046927SAndroid Build Coastguard Worker   .. math::
2098*61046927SAndroid Build Coastguard Worker
2099*61046927SAndroid Build Coastguard Worker      dst.xy = -src.xy
2100*61046927SAndroid Build Coastguard Worker
2101*61046927SAndroid Build Coastguard Worker      dst.zw = -src.zw
2102*61046927SAndroid Build Coastguard Worker
2103*61046927SAndroid Build Coastguard Worker.. opcode:: I64SSG - 64-bit Integer Set Sign
2104*61046927SAndroid Build Coastguard Worker
2105*61046927SAndroid Build Coastguard Worker   .. math::
2106*61046927SAndroid Build Coastguard Worker
2107*61046927SAndroid Build Coastguard Worker      dst.xy = (src0.xy < 0) ? -1 : (src0.xy > 0) ? 1 : 0
2108*61046927SAndroid Build Coastguard Worker
2109*61046927SAndroid Build Coastguard Worker      dst.zw = (src0.zw < 0) ? -1 : (src0.zw > 0) ? 1 : 0
2110*61046927SAndroid Build Coastguard Worker
2111*61046927SAndroid Build Coastguard Worker.. opcode:: U64ADD - 64-bit Integer Add
2112*61046927SAndroid Build Coastguard Worker
2113*61046927SAndroid Build Coastguard Worker   .. math::
2114*61046927SAndroid Build Coastguard Worker
2115*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy + src1.xy
2116*61046927SAndroid Build Coastguard Worker
2117*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw + src1.zw
2118*61046927SAndroid Build Coastguard Worker
2119*61046927SAndroid Build Coastguard Worker.. opcode:: U64MUL - 64-bit Integer Multiply
2120*61046927SAndroid Build Coastguard Worker
2121*61046927SAndroid Build Coastguard Worker   .. math::
2122*61046927SAndroid Build Coastguard Worker
2123*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy * src1.xy
2124*61046927SAndroid Build Coastguard Worker
2125*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw * src1.zw
2126*61046927SAndroid Build Coastguard Worker
2127*61046927SAndroid Build Coastguard Worker.. opcode:: U64SEQ - 64-bit Integer Set on Equal
2128*61046927SAndroid Build Coastguard Worker
2129*61046927SAndroid Build Coastguard Worker   .. math::
2130*61046927SAndroid Build Coastguard Worker
2131*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy == src1.xy ? \sim 0 : 0
2132*61046927SAndroid Build Coastguard Worker
2133*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw == src1.zw ? \sim 0 : 0
2134*61046927SAndroid Build Coastguard Worker
2135*61046927SAndroid Build Coastguard Worker.. opcode:: U64SNE - 64-bit Integer Set on Not Equal
2136*61046927SAndroid Build Coastguard Worker
2137*61046927SAndroid Build Coastguard Worker   .. math::
2138*61046927SAndroid Build Coastguard Worker
2139*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy != src1.xy ? \sim 0 : 0
2140*61046927SAndroid Build Coastguard Worker
2141*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw != src1.zw ? \sim 0 : 0
2142*61046927SAndroid Build Coastguard Worker
2143*61046927SAndroid Build Coastguard Worker.. opcode:: U64SLT - 64-bit Unsigned Integer Set on Less Than
2144*61046927SAndroid Build Coastguard Worker
2145*61046927SAndroid Build Coastguard Worker   .. math::
2146*61046927SAndroid Build Coastguard Worker
2147*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy < src1.xy ? \sim 0 : 0
2148*61046927SAndroid Build Coastguard Worker
2149*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw < src1.zw ? \sim 0 : 0
2150*61046927SAndroid Build Coastguard Worker
2151*61046927SAndroid Build Coastguard Worker.. opcode:: U64SGE - 64-bit Unsigned Integer Set on Greater Equal
2152*61046927SAndroid Build Coastguard Worker
2153*61046927SAndroid Build Coastguard Worker   .. math::
2154*61046927SAndroid Build Coastguard Worker
2155*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy >= src1.xy ? \sim 0 : 0
2156*61046927SAndroid Build Coastguard Worker
2157*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw >= src1.zw ? \sim 0 : 0
2158*61046927SAndroid Build Coastguard Worker
2159*61046927SAndroid Build Coastguard Worker.. opcode:: I64SLT - 64-bit Signed Integer Set on Less Than
2160*61046927SAndroid Build Coastguard Worker
2161*61046927SAndroid Build Coastguard Worker   .. math::
2162*61046927SAndroid Build Coastguard Worker
2163*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy < src1.xy ? \sim 0 : 0
2164*61046927SAndroid Build Coastguard Worker
2165*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw < src1.zw ? \sim 0 : 0
2166*61046927SAndroid Build Coastguard Worker
2167*61046927SAndroid Build Coastguard Worker.. opcode:: I64SGE - 64-bit Signed Integer Set on Greater Equal
2168*61046927SAndroid Build Coastguard Worker
2169*61046927SAndroid Build Coastguard Worker   .. math::
2170*61046927SAndroid Build Coastguard Worker
2171*61046927SAndroid Build Coastguard Worker      dst.x = src0.xy >= src1.xy ? \sim 0 : 0
2172*61046927SAndroid Build Coastguard Worker
2173*61046927SAndroid Build Coastguard Worker      dst.z = src0.zw >= src1.zw ? \sim 0 : 0
2174*61046927SAndroid Build Coastguard Worker
2175*61046927SAndroid Build Coastguard Worker.. opcode:: I64MIN - Minimum of 64-bit Signed Integers
2176*61046927SAndroid Build Coastguard Worker
2177*61046927SAndroid Build Coastguard Worker   .. math::
2178*61046927SAndroid Build Coastguard Worker
2179*61046927SAndroid Build Coastguard Worker      dst.xy = min(src0.xy, src1.xy)
2180*61046927SAndroid Build Coastguard Worker
2181*61046927SAndroid Build Coastguard Worker      dst.zw = min(src0.zw, src1.zw)
2182*61046927SAndroid Build Coastguard Worker
2183*61046927SAndroid Build Coastguard Worker.. opcode:: U64MIN - Minimum of 64-bit Unsigned Integers
2184*61046927SAndroid Build Coastguard Worker
2185*61046927SAndroid Build Coastguard Worker   .. math::
2186*61046927SAndroid Build Coastguard Worker
2187*61046927SAndroid Build Coastguard Worker      dst.xy = min(src0.xy, src1.xy)
2188*61046927SAndroid Build Coastguard Worker
2189*61046927SAndroid Build Coastguard Worker      dst.zw = min(src0.zw, src1.zw)
2190*61046927SAndroid Build Coastguard Worker
2191*61046927SAndroid Build Coastguard Worker.. opcode:: I64MAX - Maximum of 64-bit Signed Integers
2192*61046927SAndroid Build Coastguard Worker
2193*61046927SAndroid Build Coastguard Worker   .. math::
2194*61046927SAndroid Build Coastguard Worker
2195*61046927SAndroid Build Coastguard Worker      dst.xy = max(src0.xy, src1.xy)
2196*61046927SAndroid Build Coastguard Worker
2197*61046927SAndroid Build Coastguard Worker      dst.zw = max(src0.zw, src1.zw)
2198*61046927SAndroid Build Coastguard Worker
2199*61046927SAndroid Build Coastguard Worker.. opcode:: U64MAX - Maximum of 64-bit Unsigned Integers
2200*61046927SAndroid Build Coastguard Worker
2201*61046927SAndroid Build Coastguard Worker   .. math::
2202*61046927SAndroid Build Coastguard Worker
2203*61046927SAndroid Build Coastguard Worker      dst.xy = max(src0.xy, src1.xy)
2204*61046927SAndroid Build Coastguard Worker
2205*61046927SAndroid Build Coastguard Worker      dst.zw = max(src0.zw, src1.zw)
2206*61046927SAndroid Build Coastguard Worker
2207*61046927SAndroid Build Coastguard Worker.. opcode:: U64SHL - Shift Left 64-bit Unsigned Integer
2208*61046927SAndroid Build Coastguard Worker
2209*61046927SAndroid Build Coastguard Worker   The shift count is masked with ``0x3f`` before the shift is applied.
2210*61046927SAndroid Build Coastguard Worker
2211*61046927SAndroid Build Coastguard Worker   .. math::
2212*61046927SAndroid Build Coastguard Worker
2213*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \ll (0x3f \& src1.x)
2214*61046927SAndroid Build Coastguard Worker
2215*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \ll (0x3f \& src1.y)
2216*61046927SAndroid Build Coastguard Worker
2217*61046927SAndroid Build Coastguard Worker.. opcode:: I64SHR - Arithmetic Shift Right (of 64-bit Signed Integer)
2218*61046927SAndroid Build Coastguard Worker
2219*61046927SAndroid Build Coastguard Worker   The shift count is masked with ``0x3f`` before the shift is applied.
2220*61046927SAndroid Build Coastguard Worker
2221*61046927SAndroid Build Coastguard Worker   .. math::
2222*61046927SAndroid Build Coastguard Worker
2223*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \gg (0x3f \& src1.x)
2224*61046927SAndroid Build Coastguard Worker
2225*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \gg (0x3f \& src1.y)
2226*61046927SAndroid Build Coastguard Worker
2227*61046927SAndroid Build Coastguard Worker.. opcode:: U64SHR - Logical Shift Right (of 64-bit Unsigned Integer)
2228*61046927SAndroid Build Coastguard Worker
2229*61046927SAndroid Build Coastguard Worker   The shift count is masked with ``0x3f`` before the shift is applied.
2230*61046927SAndroid Build Coastguard Worker
2231*61046927SAndroid Build Coastguard Worker   .. math::
2232*61046927SAndroid Build Coastguard Worker
2233*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \gg (unsigned) (0x3f \& src1.x)
2234*61046927SAndroid Build Coastguard Worker
2235*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \gg (unsigned) (0x3f \& src1.y)
2236*61046927SAndroid Build Coastguard Worker
2237*61046927SAndroid Build Coastguard Worker.. opcode:: I64DIV - 64-bit Signed Integer Division
2238*61046927SAndroid Build Coastguard Worker
2239*61046927SAndroid Build Coastguard Worker   .. math::
2240*61046927SAndroid Build Coastguard Worker
2241*61046927SAndroid Build Coastguard Worker      dst.xy = \frac{src0.xy}{src1.xy}
2242*61046927SAndroid Build Coastguard Worker
2243*61046927SAndroid Build Coastguard Worker      dst.zw = \frac{src0.zw}{src1.zw}
2244*61046927SAndroid Build Coastguard Worker
2245*61046927SAndroid Build Coastguard Worker.. opcode:: U64DIV - 64-bit Unsigned Integer Division
2246*61046927SAndroid Build Coastguard Worker
2247*61046927SAndroid Build Coastguard Worker   .. math::
2248*61046927SAndroid Build Coastguard Worker
2249*61046927SAndroid Build Coastguard Worker      dst.xy = \frac{src0.xy}{src1.xy}
2250*61046927SAndroid Build Coastguard Worker
2251*61046927SAndroid Build Coastguard Worker      dst.zw = \frac{src0.zw}{src1.zw}
2252*61046927SAndroid Build Coastguard Worker
2253*61046927SAndroid Build Coastguard Worker.. opcode:: U64MOD - 64-bit Unsigned Integer Remainder
2254*61046927SAndroid Build Coastguard Worker
2255*61046927SAndroid Build Coastguard Worker   .. math::
2256*61046927SAndroid Build Coastguard Worker
2257*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \bmod src1.xy
2258*61046927SAndroid Build Coastguard Worker
2259*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \bmod src1.zw
2260*61046927SAndroid Build Coastguard Worker
2261*61046927SAndroid Build Coastguard Worker.. opcode:: I64MOD - 64-bit Signed Integer Remainder
2262*61046927SAndroid Build Coastguard Worker
2263*61046927SAndroid Build Coastguard Worker   .. math::
2264*61046927SAndroid Build Coastguard Worker
2265*61046927SAndroid Build Coastguard Worker      dst.xy = src0.xy \bmod src1.xy
2266*61046927SAndroid Build Coastguard Worker
2267*61046927SAndroid Build Coastguard Worker      dst.zw = src0.zw \bmod src1.zw
2268*61046927SAndroid Build Coastguard Worker
2269*61046927SAndroid Build Coastguard Worker.. opcode:: F2U64 - Float to 64-bit Unsigned Int
2270*61046927SAndroid Build Coastguard Worker
2271*61046927SAndroid Build Coastguard Worker   .. math::
2272*61046927SAndroid Build Coastguard Worker
2273*61046927SAndroid Build Coastguard Worker      dst.xy = (uint64_t) src0.x
2274*61046927SAndroid Build Coastguard Worker
2275*61046927SAndroid Build Coastguard Worker      dst.zw = (uint64_t) src0.y
2276*61046927SAndroid Build Coastguard Worker
2277*61046927SAndroid Build Coastguard Worker.. opcode:: F2I64 - Float to 64-bit Int
2278*61046927SAndroid Build Coastguard Worker
2279*61046927SAndroid Build Coastguard Worker   .. math::
2280*61046927SAndroid Build Coastguard Worker
2281*61046927SAndroid Build Coastguard Worker      dst.xy = (int64_t) src0.x
2282*61046927SAndroid Build Coastguard Worker
2283*61046927SAndroid Build Coastguard Worker      dst.zw = (int64_t) src0.y
2284*61046927SAndroid Build Coastguard Worker
2285*61046927SAndroid Build Coastguard Worker.. opcode:: U2I64 - Unsigned Integer to 64-bit Integer
2286*61046927SAndroid Build Coastguard Worker
2287*61046927SAndroid Build Coastguard Worker   This is a zero extension.
2288*61046927SAndroid Build Coastguard Worker
2289*61046927SAndroid Build Coastguard Worker   .. math::
2290*61046927SAndroid Build Coastguard Worker
2291*61046927SAndroid Build Coastguard Worker      dst.xy = (int64_t) src0.x
2292*61046927SAndroid Build Coastguard Worker
2293*61046927SAndroid Build Coastguard Worker      dst.zw = (int64_t) src0.y
2294*61046927SAndroid Build Coastguard Worker
2295*61046927SAndroid Build Coastguard Worker.. opcode:: I2I64 - Signed Integer to 64-bit Integer
2296*61046927SAndroid Build Coastguard Worker
2297*61046927SAndroid Build Coastguard Worker   This is a sign extension.
2298*61046927SAndroid Build Coastguard Worker
2299*61046927SAndroid Build Coastguard Worker   .. math::
2300*61046927SAndroid Build Coastguard Worker
2301*61046927SAndroid Build Coastguard Worker      dst.xy = (int64_t) src0.x
2302*61046927SAndroid Build Coastguard Worker
2303*61046927SAndroid Build Coastguard Worker      dst.zw = (int64_t) src0.y
2304*61046927SAndroid Build Coastguard Worker
2305*61046927SAndroid Build Coastguard Worker.. opcode:: D2U64 - Double to 64-bit Unsigned Int
2306*61046927SAndroid Build Coastguard Worker
2307*61046927SAndroid Build Coastguard Worker   .. math::
2308*61046927SAndroid Build Coastguard Worker
2309*61046927SAndroid Build Coastguard Worker      dst.xy = (uint64_t) src0.xy
2310*61046927SAndroid Build Coastguard Worker
2311*61046927SAndroid Build Coastguard Worker      dst.zw = (uint64_t) src0.zw
2312*61046927SAndroid Build Coastguard Worker
2313*61046927SAndroid Build Coastguard Worker.. opcode:: D2I64 - Double to 64-bit Int
2314*61046927SAndroid Build Coastguard Worker
2315*61046927SAndroid Build Coastguard Worker   .. math::
2316*61046927SAndroid Build Coastguard Worker
2317*61046927SAndroid Build Coastguard Worker      dst.xy = (int64_t) src0.xy
2318*61046927SAndroid Build Coastguard Worker
2319*61046927SAndroid Build Coastguard Worker      dst.zw = (int64_t) src0.zw
2320*61046927SAndroid Build Coastguard Worker
2321*61046927SAndroid Build Coastguard Worker.. opcode:: U642F - 64-bit unsigned integer to float
2322*61046927SAndroid Build Coastguard Worker
2323*61046927SAndroid Build Coastguard Worker   .. math::
2324*61046927SAndroid Build Coastguard Worker
2325*61046927SAndroid Build Coastguard Worker      dst.x = (float) src0.xy
2326*61046927SAndroid Build Coastguard Worker
2327*61046927SAndroid Build Coastguard Worker      dst.y = (float) src0.zw
2328*61046927SAndroid Build Coastguard Worker
2329*61046927SAndroid Build Coastguard Worker.. opcode:: I642F - 64-bit Int to Float
2330*61046927SAndroid Build Coastguard Worker
2331*61046927SAndroid Build Coastguard Worker   .. math::
2332*61046927SAndroid Build Coastguard Worker
2333*61046927SAndroid Build Coastguard Worker      dst.x = (float) src0.xy
2334*61046927SAndroid Build Coastguard Worker
2335*61046927SAndroid Build Coastguard Worker      dst.y = (float) src0.zw
2336*61046927SAndroid Build Coastguard Worker
2337*61046927SAndroid Build Coastguard Worker.. opcode:: U642D - 64-bit unsigned integer to double
2338*61046927SAndroid Build Coastguard Worker
2339*61046927SAndroid Build Coastguard Worker   .. math::
2340*61046927SAndroid Build Coastguard Worker
2341*61046927SAndroid Build Coastguard Worker      dst.xy = (double) src0.xy
2342*61046927SAndroid Build Coastguard Worker
2343*61046927SAndroid Build Coastguard Worker      dst.zw = (double) src0.zw
2344*61046927SAndroid Build Coastguard Worker
2345*61046927SAndroid Build Coastguard Worker.. opcode:: I642D - 64-bit Int to double
2346*61046927SAndroid Build Coastguard Worker
2347*61046927SAndroid Build Coastguard Worker   .. math::
2348*61046927SAndroid Build Coastguard Worker
2349*61046927SAndroid Build Coastguard Worker      dst.xy = (double) src0.xy
2350*61046927SAndroid Build Coastguard Worker
2351*61046927SAndroid Build Coastguard Worker      dst.zw = (double) src0.zw
2352*61046927SAndroid Build Coastguard Worker
2353*61046927SAndroid Build Coastguard Worker.. _samplingopcodes:
2354*61046927SAndroid Build Coastguard Worker
2355*61046927SAndroid Build Coastguard WorkerResource Sampling Opcodes
2356*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^
2357*61046927SAndroid Build Coastguard Worker
2358*61046927SAndroid Build Coastguard WorkerThose opcodes follow very closely semantics of the respective Direct3D
2359*61046927SAndroid Build Coastguard Workerinstructions. If in doubt double check Direct3D documentation.
2360*61046927SAndroid Build Coastguard WorkerNote that the swizzle on SVIEW (src1) determines texel swizzling
2361*61046927SAndroid Build Coastguard Workerafter lookup.
2362*61046927SAndroid Build Coastguard Worker
2363*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE
2364*61046927SAndroid Build Coastguard Worker
2365*61046927SAndroid Build Coastguard Worker   Using provided address, sample data from the specified texture using the
2366*61046927SAndroid Build Coastguard Worker   filtering mode identified by the given sampler. The source data may come from
2367*61046927SAndroid Build Coastguard Worker   any resource type other than buffers.
2368*61046927SAndroid Build Coastguard Worker
2369*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE dst, address, sampler_view, sampler``
2370*61046927SAndroid Build Coastguard Worker
2371*61046927SAndroid Build Coastguard Worker   Example: ``SAMPLE TEMP[0], TEMP[1], SVIEW[0], SAMP[0]``
2372*61046927SAndroid Build Coastguard Worker
2373*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_I
2374*61046927SAndroid Build Coastguard Worker
2375*61046927SAndroid Build Coastguard Worker   Simplified alternative to the SAMPLE instruction.  Using the provided
2376*61046927SAndroid Build Coastguard Worker   integer address, SAMPLE_I fetches data from the specified sampler view
2377*61046927SAndroid Build Coastguard Worker   without any filtering.  The source data may come from any resource type
2378*61046927SAndroid Build Coastguard Worker   other than CUBE.
2379*61046927SAndroid Build Coastguard Worker
2380*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_I dst, address, sampler_view``
2381*61046927SAndroid Build Coastguard Worker
2382*61046927SAndroid Build Coastguard Worker   Example: ``SAMPLE_I TEMP[0], TEMP[1], SVIEW[0]``
2383*61046927SAndroid Build Coastguard Worker
2384*61046927SAndroid Build Coastguard Worker   The 'address' is specified as unsigned integers. If the 'address' is out of
2385*61046927SAndroid Build Coastguard Worker   range [0...(# texels - 1)] the result of the fetch is always 0 in all
2386*61046927SAndroid Build Coastguard Worker   components.  As such the instruction doesn't honor address wrap modes, in
2387*61046927SAndroid Build Coastguard Worker   cases where that behavior is desirable 'SAMPLE' instruction should be used.
2388*61046927SAndroid Build Coastguard Worker   address.w always provides an unsigned integer mipmap level. If the value is
2389*61046927SAndroid Build Coastguard Worker   out of the range then the instruction always returns 0 in all components.
2390*61046927SAndroid Build Coastguard Worker   address.yz are ignored for buffers and 1d textures.  address.z is ignored
2391*61046927SAndroid Build Coastguard Worker   for 1d texture arrays and 2d textures.
2392*61046927SAndroid Build Coastguard Worker
2393*61046927SAndroid Build Coastguard Worker   For 1D texture arrays address.y provides the array index (also as unsigned
2394*61046927SAndroid Build Coastguard Worker   integer). If the value is out of the range of available array indices
2395*61046927SAndroid Build Coastguard Worker   [0... (array size - 1)] then the opcode always returns 0 in all components.
2396*61046927SAndroid Build Coastguard Worker   For 2D texture arrays address.z provides the array index, otherwise it
2397*61046927SAndroid Build Coastguard Worker   exhibits the same behavior as in the case for 1D texture arrays.  The exact
2398*61046927SAndroid Build Coastguard Worker   semantics of the source address are presented in the table below:
2399*61046927SAndroid Build Coastguard Worker
2400*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2401*61046927SAndroid Build Coastguard Worker   | resource type             | X  |  Y  |  Z  |    W    |
2402*61046927SAndroid Build Coastguard Worker   +===========================+====+=====+=====+=========+
2403*61046927SAndroid Build Coastguard Worker   | ``PIPE_BUFFER``           | x  |     |     | ignored |
2404*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2405*61046927SAndroid Build Coastguard Worker   | ``PIPE_TEXTURE_1D``       | x  |     |     |   mpl   |
2406*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2407*61046927SAndroid Build Coastguard Worker   | ``PIPE_TEXTURE_2D``       | x  |  y  |     |   mpl   |
2408*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2409*61046927SAndroid Build Coastguard Worker   | ``PIPE_TEXTURE_3D``       | x  |  y  |  z  |   mpl   |
2410*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2411*61046927SAndroid Build Coastguard Worker   | ``PIPE_TEXTURE_RECT``     | x  |  y  |     |   mpl   |
2412*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2413*61046927SAndroid Build Coastguard Worker   | ``PIPE_TEXTURE_CUBE``     | not allowed as source    |
2414*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2415*61046927SAndroid Build Coastguard Worker   | ``PIPE_TEXTURE_1D_ARRAY`` | x  | idx |     |   mpl   |
2416*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2417*61046927SAndroid Build Coastguard Worker   | ``PIPE_TEXTURE_2D_ARRAY`` | x  |  y  | idx |   mpl   |
2418*61046927SAndroid Build Coastguard Worker   +---------------------------+----+-----+-----+---------+
2419*61046927SAndroid Build Coastguard Worker
2420*61046927SAndroid Build Coastguard Worker   Where 'mpl' is a mipmap level and 'idx' is the array index.
2421*61046927SAndroid Build Coastguard Worker
2422*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_I_MS
2423*61046927SAndroid Build Coastguard Worker
2424*61046927SAndroid Build Coastguard Worker   Just like SAMPLE_I but allows fetch data from multi-sampled surfaces.
2425*61046927SAndroid Build Coastguard Worker
2426*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_I_MS dst, address, sampler_view, sample``
2427*61046927SAndroid Build Coastguard Worker
2428*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_B
2429*61046927SAndroid Build Coastguard Worker
2430*61046927SAndroid Build Coastguard Worker   Just like the SAMPLE instruction with the exception that an additional bias
2431*61046927SAndroid Build Coastguard Worker   is applied to the level of detail computed as part of the instruction
2432*61046927SAndroid Build Coastguard Worker   execution.
2433*61046927SAndroid Build Coastguard Worker
2434*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_B dst, address, sampler_view, sampler, lod_bias``
2435*61046927SAndroid Build Coastguard Worker
2436*61046927SAndroid Build Coastguard Worker   Example: ``SAMPLE_B TEMP[0], TEMP[1], SVIEW[0], SAMP[0], TEMP[2].x``
2437*61046927SAndroid Build Coastguard Worker
2438*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_C
2439*61046927SAndroid Build Coastguard Worker
2440*61046927SAndroid Build Coastguard Worker   Similar to the SAMPLE instruction but it performs a comparison filter. The
2441*61046927SAndroid Build Coastguard Worker   operands to SAMPLE_C are identical to SAMPLE, except that there is an
2442*61046927SAndroid Build Coastguard Worker   additional float32 operand, reference value, which must be a register with
2443*61046927SAndroid Build Coastguard Worker   single-component, or a scalar literal.  SAMPLE_C makes the hardware use the
2444*61046927SAndroid Build Coastguard Worker   current samplers compare_func (in pipe_sampler_state) to compare reference
2445*61046927SAndroid Build Coastguard Worker   value against the red component value for the source resource at each texel
2446*61046927SAndroid Build Coastguard Worker   that the currently configured texture filter covers based on the provided
2447*61046927SAndroid Build Coastguard Worker   coordinates.
2448*61046927SAndroid Build Coastguard Worker
2449*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_C dst, address, sampler_view.r, sampler, ref_value``
2450*61046927SAndroid Build Coastguard Worker
2451*61046927SAndroid Build Coastguard Worker   Example: ``SAMPLE_C TEMP[0], TEMP[1], SVIEW[0].r, SAMP[0], TEMP[2].x``
2452*61046927SAndroid Build Coastguard Worker
2453*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_C_LZ
2454*61046927SAndroid Build Coastguard Worker
2455*61046927SAndroid Build Coastguard Worker   Same as SAMPLE_C, but LOD is 0 and derivatives are ignored. The LZ stands
2456*61046927SAndroid Build Coastguard Worker   for level-zero.
2457*61046927SAndroid Build Coastguard Worker
2458*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_C_LZ dst, address, sampler_view.r, sampler, ref_value``
2459*61046927SAndroid Build Coastguard Worker
2460*61046927SAndroid Build Coastguard Worker   Example: ``SAMPLE_C_LZ TEMP[0], TEMP[1], SVIEW[0].r, SAMP[0], TEMP[2].x``
2461*61046927SAndroid Build Coastguard Worker
2462*61046927SAndroid Build Coastguard Worker
2463*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_D
2464*61046927SAndroid Build Coastguard Worker
2465*61046927SAndroid Build Coastguard Worker   SAMPLE_D is identical to the SAMPLE opcode except that the derivatives for
2466*61046927SAndroid Build Coastguard Worker   the source address in the x direction and the y direction are provided by
2467*61046927SAndroid Build Coastguard Worker   extra parameters.
2468*61046927SAndroid Build Coastguard Worker
2469*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_D dst, address, sampler_view, sampler, der_x, der_y``
2470*61046927SAndroid Build Coastguard Worker
2471*61046927SAndroid Build Coastguard Worker   Example: ``SAMPLE_D TEMP[0], TEMP[1], SVIEW[0], SAMP[0], TEMP[2], TEMP[3]``
2472*61046927SAndroid Build Coastguard Worker
2473*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_L
2474*61046927SAndroid Build Coastguard Worker
2475*61046927SAndroid Build Coastguard Worker   SAMPLE_L is identical to the SAMPLE opcode except that the LOD is provided
2476*61046927SAndroid Build Coastguard Worker   directly as a scalar value, representing no anisotropy.
2477*61046927SAndroid Build Coastguard Worker
2478*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_L dst, address, sampler_view, sampler, explicit_lod``
2479*61046927SAndroid Build Coastguard Worker
2480*61046927SAndroid Build Coastguard Worker   Example: ``SAMPLE_L TEMP[0], TEMP[1], SVIEW[0], SAMP[0], TEMP[2].x``
2481*61046927SAndroid Build Coastguard Worker
2482*61046927SAndroid Build Coastguard Worker.. opcode:: GATHER4
2483*61046927SAndroid Build Coastguard Worker
2484*61046927SAndroid Build Coastguard Worker   Gathers the four texels to be used in a bi-linear filtering operation and
2485*61046927SAndroid Build Coastguard Worker   packs them into a single register.  Only works with 2D, 2D array, cubemaps,
2486*61046927SAndroid Build Coastguard Worker   and cubemaps arrays.  For 2D textures, only the addressing modes of the
2487*61046927SAndroid Build Coastguard Worker   sampler and the top level of any mip pyramid are used. Set W to zero.  It
2488*61046927SAndroid Build Coastguard Worker   behaves like the SAMPLE instruction, but a filtered sample is not
2489*61046927SAndroid Build Coastguard Worker   generated. The four samples that contribute to filtering are placed into
2490*61046927SAndroid Build Coastguard Worker   XYZW in counter-clockwise order, starting with the (u,v) texture coordinate
2491*61046927SAndroid Build Coastguard Worker   delta at the following locations (-, +), (+, +), (+, -), (-, -), where the
2492*61046927SAndroid Build Coastguard Worker   magnitude of the deltas are half a texel.
2493*61046927SAndroid Build Coastguard Worker
2494*61046927SAndroid Build Coastguard Worker
2495*61046927SAndroid Build Coastguard Worker.. opcode:: SVIEWINFO
2496*61046927SAndroid Build Coastguard Worker
2497*61046927SAndroid Build Coastguard Worker   Query the dimensions of a given sampler view.  dst receives width, height,
2498*61046927SAndroid Build Coastguard Worker   depth or array size and number of mipmap levels as int4. The dst can have a
2499*61046927SAndroid Build Coastguard Worker   writemask which will specify what info is the caller interested in.
2500*61046927SAndroid Build Coastguard Worker
2501*61046927SAndroid Build Coastguard Worker   Syntax: ``SVIEWINFO dst, src_mip_level, sampler_view``
2502*61046927SAndroid Build Coastguard Worker
2503*61046927SAndroid Build Coastguard Worker   Example: ``SVIEWINFO TEMP[0], TEMP[1].x, SVIEW[0]``
2504*61046927SAndroid Build Coastguard Worker
2505*61046927SAndroid Build Coastguard Worker   src_mip_level is an unsigned integer scalar. If it's out of range then
2506*61046927SAndroid Build Coastguard Worker   returns 0 for width, height and depth/array size but the total number of
2507*61046927SAndroid Build Coastguard Worker   mipmap is still returned correctly for the given sampler view.  The returned
2508*61046927SAndroid Build Coastguard Worker   width, height and depth values are for the mipmap level selected by the
2509*61046927SAndroid Build Coastguard Worker   src_mip_level and are in the number of texels.  For 1d texture array width
2510*61046927SAndroid Build Coastguard Worker   is in dst.x, array size is in dst.y and dst.z is 0. The number of mipmaps is
2511*61046927SAndroid Build Coastguard Worker   still in dst.w.  In contrast to d3d10 resinfo, there's no way in the TGSI
2512*61046927SAndroid Build Coastguard Worker   instruction encoding to specify the return type (float/rcpfloat/uint), hence
2513*61046927SAndroid Build Coastguard Worker   always using uint. Also, unlike the SAMPLE instructions, the swizzle on src1
2514*61046927SAndroid Build Coastguard Worker   resinfo allowing swizzling dst values is ignored (due to the interaction
2515*61046927SAndroid Build Coastguard Worker   with rcpfloat modifier which requires some swizzle handling in the state
2516*61046927SAndroid Build Coastguard Worker   tracker anyway).
2517*61046927SAndroid Build Coastguard Worker
2518*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_POS
2519*61046927SAndroid Build Coastguard Worker
2520*61046927SAndroid Build Coastguard Worker   Query the position of a sample in the given resource or render target
2521*61046927SAndroid Build Coastguard Worker   when per-sample fragment shading is in effect.
2522*61046927SAndroid Build Coastguard Worker
2523*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_POS dst, source, sample_index``
2524*61046927SAndroid Build Coastguard Worker
2525*61046927SAndroid Build Coastguard Worker   dst receives float4 (x, y, undef, undef) indicated where the sample is
2526*61046927SAndroid Build Coastguard Worker   located. Sample locations are in the range [0, 1] where 0.5 is the center
2527*61046927SAndroid Build Coastguard Worker   of the fragment.
2528*61046927SAndroid Build Coastguard Worker
2529*61046927SAndroid Build Coastguard Worker   source is either a sampler view (to indicate a shader resource) or temp
2530*61046927SAndroid Build Coastguard Worker   register (to indicate the render target).  The source register may have
2531*61046927SAndroid Build Coastguard Worker   an optional swizzle to apply to the returned result
2532*61046927SAndroid Build Coastguard Worker
2533*61046927SAndroid Build Coastguard Worker   sample_index is an integer scalar indicating which sample position is to
2534*61046927SAndroid Build Coastguard Worker   be queried.
2535*61046927SAndroid Build Coastguard Worker
2536*61046927SAndroid Build Coastguard Worker   If per-sample shading is not in effect or the source resource or render
2537*61046927SAndroid Build Coastguard Worker   target is not multisampled, the result is (0.5, 0.5, undef, undef).
2538*61046927SAndroid Build Coastguard Worker
2539*61046927SAndroid Build Coastguard Worker   NOTE: no driver has implemented this opcode yet (and no gallium frontend
2540*61046927SAndroid Build Coastguard Worker   emits it).  This information is subject to change.
2541*61046927SAndroid Build Coastguard Worker
2542*61046927SAndroid Build Coastguard Worker.. opcode:: SAMPLE_INFO
2543*61046927SAndroid Build Coastguard Worker
2544*61046927SAndroid Build Coastguard Worker   Query the number of samples in a multisampled resource or render target.
2545*61046927SAndroid Build Coastguard Worker
2546*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMPLE_INFO dst, source``
2547*61046927SAndroid Build Coastguard Worker
2548*61046927SAndroid Build Coastguard Worker   dst receives int4 (n, 0, 0, 0) where n is the number of samples in a
2549*61046927SAndroid Build Coastguard Worker   resource or the render target.
2550*61046927SAndroid Build Coastguard Worker
2551*61046927SAndroid Build Coastguard Worker   source is either a sampler view (to indicate a shader resource) or temp
2552*61046927SAndroid Build Coastguard Worker   register (to indicate the render target).  The source register may have
2553*61046927SAndroid Build Coastguard Worker   an optional swizzle to apply to the returned result
2554*61046927SAndroid Build Coastguard Worker
2555*61046927SAndroid Build Coastguard Worker   If per-sample shading is not in effect or the source resource or render
2556*61046927SAndroid Build Coastguard Worker   target is not multisampled, the result is (1, 0, 0, 0).
2557*61046927SAndroid Build Coastguard Worker
2558*61046927SAndroid Build Coastguard Worker   NOTE: no driver has implemented this opcode yet (and no gallium frontend
2559*61046927SAndroid Build Coastguard Worker   emits it).  This information is subject to change.
2560*61046927SAndroid Build Coastguard Worker
2561*61046927SAndroid Build Coastguard Worker.. opcode:: LOD - level of detail
2562*61046927SAndroid Build Coastguard Worker
2563*61046927SAndroid Build Coastguard Worker   Same syntax as the SAMPLE opcode but instead of performing an actual
2564*61046927SAndroid Build Coastguard Worker   texture lookup/filter, return the computed LOD information that the
2565*61046927SAndroid Build Coastguard Worker   texture pipe would use to access the texture. The Y component contains
2566*61046927SAndroid Build Coastguard Worker   the computed LOD lambda_prime. The X component contains the LOD that will
2567*61046927SAndroid Build Coastguard Worker   be accessed, based on min/max lod's and mipmap filters.
2568*61046927SAndroid Build Coastguard Worker   The Z and W components are set to 0.
2569*61046927SAndroid Build Coastguard Worker
2570*61046927SAndroid Build Coastguard Worker   Syntax: ``LOD dst, address, sampler_view, sampler``
2571*61046927SAndroid Build Coastguard Worker
2572*61046927SAndroid Build Coastguard Worker
2573*61046927SAndroid Build Coastguard Worker.. _resourceopcodes:
2574*61046927SAndroid Build Coastguard Worker
2575*61046927SAndroid Build Coastguard WorkerResource Access Opcodes
2576*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^
2577*61046927SAndroid Build Coastguard Worker
2578*61046927SAndroid Build Coastguard WorkerFor these opcodes, the resource can be a BUFFER, IMAGE, or MEMORY.
2579*61046927SAndroid Build Coastguard Worker
2580*61046927SAndroid Build Coastguard Worker.. opcode:: LOAD - Fetch data from a shader buffer or image
2581*61046927SAndroid Build Coastguard Worker
2582*61046927SAndroid Build Coastguard Worker   Syntax: ``LOAD dst, resource, address``
2583*61046927SAndroid Build Coastguard Worker
2584*61046927SAndroid Build Coastguard Worker   Example: ``LOAD TEMP[0], BUFFER[0], TEMP[1]``
2585*61046927SAndroid Build Coastguard Worker
2586*61046927SAndroid Build Coastguard Worker   Using the provided integer address, LOAD fetches data from the
2587*61046927SAndroid Build Coastguard Worker   specified buffer or texture without any filtering.
2588*61046927SAndroid Build Coastguard Worker
2589*61046927SAndroid Build Coastguard Worker   The 'address' is specified as a vector of unsigned integers.  If the
2590*61046927SAndroid Build Coastguard Worker   'address' is out of range the result is unspecified.
2591*61046927SAndroid Build Coastguard Worker
2592*61046927SAndroid Build Coastguard Worker   Only the first mipmap level of a resource can be read from using this
2593*61046927SAndroid Build Coastguard Worker   instruction.
2594*61046927SAndroid Build Coastguard Worker
2595*61046927SAndroid Build Coastguard Worker   For 1D or 2D texture arrays, the array index is provided as an
2596*61046927SAndroid Build Coastguard Worker   unsigned integer in address.y or address.z, respectively.  address.yz
2597*61046927SAndroid Build Coastguard Worker   are ignored for buffers and 1D textures.  address.z is ignored for 1D
2598*61046927SAndroid Build Coastguard Worker   texture arrays and 2D textures.  address.w is always ignored.
2599*61046927SAndroid Build Coastguard Worker
2600*61046927SAndroid Build Coastguard Worker   A swizzle suffix may be added to the resource argument this will
2601*61046927SAndroid Build Coastguard Worker   cause the resource data to be swizzled accordingly.
2602*61046927SAndroid Build Coastguard Worker
2603*61046927SAndroid Build Coastguard Worker.. opcode:: STORE - Write data to a shader resource
2604*61046927SAndroid Build Coastguard Worker
2605*61046927SAndroid Build Coastguard Worker   Syntax: ``STORE resource, address, src``
2606*61046927SAndroid Build Coastguard Worker
2607*61046927SAndroid Build Coastguard Worker   Example: ``STORE BUFFER[0], TEMP[0], TEMP[1]``
2608*61046927SAndroid Build Coastguard Worker
2609*61046927SAndroid Build Coastguard Worker   Using the provided integer address, STORE writes data to the
2610*61046927SAndroid Build Coastguard Worker   specified buffer or texture.
2611*61046927SAndroid Build Coastguard Worker
2612*61046927SAndroid Build Coastguard Worker   The 'address' is specified as a vector of unsigned integers.  If the
2613*61046927SAndroid Build Coastguard Worker   'address' is out of range the result is unspecified.
2614*61046927SAndroid Build Coastguard Worker
2615*61046927SAndroid Build Coastguard Worker   Only the first mipmap level of a resource can be written to using
2616*61046927SAndroid Build Coastguard Worker   this instruction.
2617*61046927SAndroid Build Coastguard Worker
2618*61046927SAndroid Build Coastguard Worker   For 1D or 2D texture arrays, the array index is provided as an
2619*61046927SAndroid Build Coastguard Worker   unsigned integer in address.y or address.z, respectively.
2620*61046927SAndroid Build Coastguard Worker   address.yz are ignored for buffers and 1D textures.  address.z is
2621*61046927SAndroid Build Coastguard Worker   ignored for 1D texture arrays and 2D textures.  address.w is always
2622*61046927SAndroid Build Coastguard Worker   ignored.
2623*61046927SAndroid Build Coastguard Worker
2624*61046927SAndroid Build Coastguard Worker.. opcode:: RESQ - Query information about a resource
2625*61046927SAndroid Build Coastguard Worker
2626*61046927SAndroid Build Coastguard Worker   Syntax: ``RESQ dst, resource``
2627*61046927SAndroid Build Coastguard Worker
2628*61046927SAndroid Build Coastguard Worker   Example: ``RESQ TEMP[0], BUFFER[0]``
2629*61046927SAndroid Build Coastguard Worker
2630*61046927SAndroid Build Coastguard Worker   Returns information about the buffer or image resource. For buffer
2631*61046927SAndroid Build Coastguard Worker   resources, the size (in bytes) is returned in the x component. For
2632*61046927SAndroid Build Coastguard Worker   image resources, .xyz will contain the width/height/layers of the
2633*61046927SAndroid Build Coastguard Worker   image, while .w will contain the number of samples for multi-sampled
2634*61046927SAndroid Build Coastguard Worker   images.
2635*61046927SAndroid Build Coastguard Worker
2636*61046927SAndroid Build Coastguard Worker.. opcode:: FBFETCH - Load data from framebuffer
2637*61046927SAndroid Build Coastguard Worker
2638*61046927SAndroid Build Coastguard Worker   Syntax: ``FBFETCH dst, output``
2639*61046927SAndroid Build Coastguard Worker
2640*61046927SAndroid Build Coastguard Worker   Example: ``FBFETCH TEMP[0], OUT[0]``
2641*61046927SAndroid Build Coastguard Worker
2642*61046927SAndroid Build Coastguard Worker   This is only valid on ``COLOR`` semantic outputs. Returns the color
2643*61046927SAndroid Build Coastguard Worker   of the current position in the framebuffer from before this fragment
2644*61046927SAndroid Build Coastguard Worker   shader invocation. May return the same value from multiple calls for
2645*61046927SAndroid Build Coastguard Worker   a particular output within a single invocation. Note that result may
2646*61046927SAndroid Build Coastguard Worker   be undefined if a fragment is drawn multiple times without a blend
2647*61046927SAndroid Build Coastguard Worker   barrier in between.
2648*61046927SAndroid Build Coastguard Worker
2649*61046927SAndroid Build Coastguard Worker
2650*61046927SAndroid Build Coastguard Worker.. _bindlessopcodes:
2651*61046927SAndroid Build Coastguard Worker
2652*61046927SAndroid Build Coastguard WorkerBindless Opcodes
2653*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^
2654*61046927SAndroid Build Coastguard Worker
2655*61046927SAndroid Build Coastguard WorkerThese opcodes are for working with bindless sampler or image handles and
2656*61046927SAndroid Build Coastguard Workerrequire PIPE_CAP_BINDLESS_TEXTURE.
2657*61046927SAndroid Build Coastguard Worker
2658*61046927SAndroid Build Coastguard Worker.. opcode:: IMG2HND - Get a bindless handle for a image
2659*61046927SAndroid Build Coastguard Worker
2660*61046927SAndroid Build Coastguard Worker   Syntax: ``IMG2HND dst, image``
2661*61046927SAndroid Build Coastguard Worker
2662*61046927SAndroid Build Coastguard Worker   Example: ``IMG2HND TEMP[0], IMAGE[0]``
2663*61046927SAndroid Build Coastguard Worker
2664*61046927SAndroid Build Coastguard Worker   Sets 'dst' to a bindless handle for 'image'.
2665*61046927SAndroid Build Coastguard Worker
2666*61046927SAndroid Build Coastguard Worker.. opcode:: SAMP2HND - Get a bindless handle for a sampler
2667*61046927SAndroid Build Coastguard Worker
2668*61046927SAndroid Build Coastguard Worker   Syntax: ``SAMP2HND dst, sampler``
2669*61046927SAndroid Build Coastguard Worker
2670*61046927SAndroid Build Coastguard Worker   Example: ``SAMP2HND TEMP[0], SAMP[0]``
2671*61046927SAndroid Build Coastguard Worker
2672*61046927SAndroid Build Coastguard Worker   Sets 'dst' to a bindless handle for 'sampler'.
2673*61046927SAndroid Build Coastguard Worker
2674*61046927SAndroid Build Coastguard Worker
2675*61046927SAndroid Build Coastguard Worker.. _threadsyncopcodes:
2676*61046927SAndroid Build Coastguard Worker
2677*61046927SAndroid Build Coastguard WorkerInter-thread synchronization opcodes
2678*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2679*61046927SAndroid Build Coastguard Worker
2680*61046927SAndroid Build Coastguard WorkerThese opcodes are intended for communication between threads running
2681*61046927SAndroid Build Coastguard Workerwithin the same compute grid.  For now they're only valid in compute
2682*61046927SAndroid Build Coastguard Workerprograms.
2683*61046927SAndroid Build Coastguard Worker
2684*61046927SAndroid Build Coastguard Worker.. opcode:: BARRIER - Thread group barrier
2685*61046927SAndroid Build Coastguard Worker
2686*61046927SAndroid Build Coastguard Worker   ``BARRIER``
2687*61046927SAndroid Build Coastguard Worker
2688*61046927SAndroid Build Coastguard Worker   This opcode suspends the execution of the current thread until all
2689*61046927SAndroid Build Coastguard Worker   the remaining threads in the working group reach the same point of
2690*61046927SAndroid Build Coastguard Worker   the program.  Results are unspecified if any of the remaining
2691*61046927SAndroid Build Coastguard Worker   threads terminates or never reaches an executed BARRIER instruction.
2692*61046927SAndroid Build Coastguard Worker
2693*61046927SAndroid Build Coastguard Worker.. opcode:: MEMBAR - Memory barrier
2694*61046927SAndroid Build Coastguard Worker
2695*61046927SAndroid Build Coastguard Worker   ``MEMBAR type``
2696*61046927SAndroid Build Coastguard Worker
2697*61046927SAndroid Build Coastguard Worker   This opcode waits for the completion of all memory accesses based on
2698*61046927SAndroid Build Coastguard Worker   the type passed in. The type is an immediate bitfield with the following
2699*61046927SAndroid Build Coastguard Worker   meaning:
2700*61046927SAndroid Build Coastguard Worker
2701*61046927SAndroid Build Coastguard Worker   Bit 0: Shader storage buffers
2702*61046927SAndroid Build Coastguard Worker   Bit 1: Atomic buffers
2703*61046927SAndroid Build Coastguard Worker   Bit 2: Images
2704*61046927SAndroid Build Coastguard Worker   Bit 3: Shared memory
2705*61046927SAndroid Build Coastguard Worker   Bit 4: Thread group
2706*61046927SAndroid Build Coastguard Worker
2707*61046927SAndroid Build Coastguard Worker   These may be passed in in any combination. An implementation is free to not
2708*61046927SAndroid Build Coastguard Worker   distinguish between these as it sees fit. However these map to all the
2709*61046927SAndroid Build Coastguard Worker   possibilities made available by GLSL.
2710*61046927SAndroid Build Coastguard Worker
2711*61046927SAndroid Build Coastguard Worker.. _atomopcodes:
2712*61046927SAndroid Build Coastguard Worker
2713*61046927SAndroid Build Coastguard WorkerAtomic opcodes
2714*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^
2715*61046927SAndroid Build Coastguard Worker
2716*61046927SAndroid Build Coastguard WorkerThese opcodes provide atomic variants of some common arithmetic and
2717*61046927SAndroid Build Coastguard Workerlogical operations.  In this context atomicity means that another
2718*61046927SAndroid Build Coastguard Workerconcurrent memory access operation that affects the same memory
2719*61046927SAndroid Build Coastguard Workerlocation is guaranteed to be performed strictly before or after the
2720*61046927SAndroid Build Coastguard Workerentire execution of the atomic operation. The resource may be a BUFFER,
2721*61046927SAndroid Build Coastguard WorkerIMAGE, HWATOMIC, or MEMORY.  In the case of an image, the offset works
2722*61046927SAndroid Build Coastguard Workerthe same as for ``LOAD`` and ``STORE``, specified above. For atomic
2723*61046927SAndroid Build Coastguard Workercounters, the offset is an immediate index to the base HW atomic
2724*61046927SAndroid Build Coastguard Workercounter for this operation.
2725*61046927SAndroid Build Coastguard WorkerThese atomic operations may only be used with 32-bit integer image formats.
2726*61046927SAndroid Build Coastguard Worker
2727*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMUADD - Atomic integer addition
2728*61046927SAndroid Build Coastguard Worker
2729*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMUADD dst, resource, offset, src``
2730*61046927SAndroid Build Coastguard Worker
2731*61046927SAndroid Build Coastguard Worker   Example: ``ATOMUADD TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2732*61046927SAndroid Build Coastguard Worker
2733*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2734*61046927SAndroid Build Coastguard Worker
2735*61046927SAndroid Build Coastguard Worker   .. math::
2736*61046927SAndroid Build Coastguard Worker
2737*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2738*61046927SAndroid Build Coastguard Worker
2739*61046927SAndroid Build Coastguard Worker      resource[offset] = dst_x + src_x
2740*61046927SAndroid Build Coastguard Worker
2741*61046927SAndroid Build Coastguard Worker
2742*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMFADD - Atomic floating point addition
2743*61046927SAndroid Build Coastguard Worker
2744*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMFADD dst, resource, offset, src``
2745*61046927SAndroid Build Coastguard Worker
2746*61046927SAndroid Build Coastguard Worker   Example: ``ATOMFADD TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2747*61046927SAndroid Build Coastguard Worker
2748*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2749*61046927SAndroid Build Coastguard Worker
2750*61046927SAndroid Build Coastguard Worker   .. math::
2751*61046927SAndroid Build Coastguard Worker
2752*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2753*61046927SAndroid Build Coastguard Worker
2754*61046927SAndroid Build Coastguard Worker      resource[offset] = dst_x + src_x
2755*61046927SAndroid Build Coastguard Worker
2756*61046927SAndroid Build Coastguard Worker
2757*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMXCHG - Atomic exchange
2758*61046927SAndroid Build Coastguard Worker
2759*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMXCHG dst, resource, offset, src``
2760*61046927SAndroid Build Coastguard Worker
2761*61046927SAndroid Build Coastguard Worker   Example: ``ATOMXCHG TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2762*61046927SAndroid Build Coastguard Worker
2763*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2764*61046927SAndroid Build Coastguard Worker
2765*61046927SAndroid Build Coastguard Worker   .. math::
2766*61046927SAndroid Build Coastguard Worker
2767*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2768*61046927SAndroid Build Coastguard Worker
2769*61046927SAndroid Build Coastguard Worker      resource[offset] = src_x
2770*61046927SAndroid Build Coastguard Worker
2771*61046927SAndroid Build Coastguard Worker
2772*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMCAS - Atomic compare-and-exchange
2773*61046927SAndroid Build Coastguard Worker
2774*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMCAS dst, resource, offset, cmp, src``
2775*61046927SAndroid Build Coastguard Worker
2776*61046927SAndroid Build Coastguard Worker   Example: ``ATOMCAS TEMP[0], BUFFER[0], TEMP[1], TEMP[2], TEMP[3]``
2777*61046927SAndroid Build Coastguard Worker
2778*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2779*61046927SAndroid Build Coastguard Worker
2780*61046927SAndroid Build Coastguard Worker   .. math::
2781*61046927SAndroid Build Coastguard Worker
2782*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2783*61046927SAndroid Build Coastguard Worker
2784*61046927SAndroid Build Coastguard Worker      resource[offset] = (dst_x == cmp_x ? src_x : dst_x)
2785*61046927SAndroid Build Coastguard Worker
2786*61046927SAndroid Build Coastguard Worker
2787*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMAND - Atomic bitwise And
2788*61046927SAndroid Build Coastguard Worker
2789*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMAND dst, resource, offset, src``
2790*61046927SAndroid Build Coastguard Worker
2791*61046927SAndroid Build Coastguard Worker   Example: ``ATOMAND TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2792*61046927SAndroid Build Coastguard Worker
2793*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2794*61046927SAndroid Build Coastguard Worker
2795*61046927SAndroid Build Coastguard Worker   .. math::
2796*61046927SAndroid Build Coastguard Worker
2797*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2798*61046927SAndroid Build Coastguard Worker
2799*61046927SAndroid Build Coastguard Worker      resource[offset] = dst_x \& src_x
2800*61046927SAndroid Build Coastguard Worker
2801*61046927SAndroid Build Coastguard Worker
2802*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMOR - Atomic bitwise Or
2803*61046927SAndroid Build Coastguard Worker
2804*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMOR dst, resource, offset, src``
2805*61046927SAndroid Build Coastguard Worker
2806*61046927SAndroid Build Coastguard Worker   Example: ``ATOMOR TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2807*61046927SAndroid Build Coastguard Worker
2808*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2809*61046927SAndroid Build Coastguard Worker
2810*61046927SAndroid Build Coastguard Worker   .. math::
2811*61046927SAndroid Build Coastguard Worker
2812*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2813*61046927SAndroid Build Coastguard Worker
2814*61046927SAndroid Build Coastguard Worker      resource[offset] = dst_x | src_x
2815*61046927SAndroid Build Coastguard Worker
2816*61046927SAndroid Build Coastguard Worker
2817*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMXOR - Atomic bitwise Xor
2818*61046927SAndroid Build Coastguard Worker
2819*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMXOR dst, resource, offset, src``
2820*61046927SAndroid Build Coastguard Worker
2821*61046927SAndroid Build Coastguard Worker   Example: ``ATOMXOR TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2822*61046927SAndroid Build Coastguard Worker
2823*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2824*61046927SAndroid Build Coastguard Worker
2825*61046927SAndroid Build Coastguard Worker   .. math::
2826*61046927SAndroid Build Coastguard Worker
2827*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2828*61046927SAndroid Build Coastguard Worker
2829*61046927SAndroid Build Coastguard Worker      resource[offset] = dst_x \oplus src_x
2830*61046927SAndroid Build Coastguard Worker
2831*61046927SAndroid Build Coastguard Worker
2832*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMUMIN - Atomic unsigned minimum
2833*61046927SAndroid Build Coastguard Worker
2834*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMUMIN dst, resource, offset, src``
2835*61046927SAndroid Build Coastguard Worker
2836*61046927SAndroid Build Coastguard Worker   Example: ``ATOMUMIN TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2837*61046927SAndroid Build Coastguard Worker
2838*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2839*61046927SAndroid Build Coastguard Worker
2840*61046927SAndroid Build Coastguard Worker   .. math::
2841*61046927SAndroid Build Coastguard Worker
2842*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2843*61046927SAndroid Build Coastguard Worker
2844*61046927SAndroid Build Coastguard Worker      resource[offset] = (dst_x < src_x ? dst_x : src_x)
2845*61046927SAndroid Build Coastguard Worker
2846*61046927SAndroid Build Coastguard Worker
2847*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMUMAX - Atomic unsigned maximum
2848*61046927SAndroid Build Coastguard Worker
2849*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMUMAX dst, resource, offset, src``
2850*61046927SAndroid Build Coastguard Worker
2851*61046927SAndroid Build Coastguard Worker   Example: ``ATOMUMAX TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2852*61046927SAndroid Build Coastguard Worker
2853*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2854*61046927SAndroid Build Coastguard Worker
2855*61046927SAndroid Build Coastguard Worker   .. math::
2856*61046927SAndroid Build Coastguard Worker
2857*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2858*61046927SAndroid Build Coastguard Worker
2859*61046927SAndroid Build Coastguard Worker      resource[offset] = (dst_x > src_x ? dst_x : src_x)
2860*61046927SAndroid Build Coastguard Worker
2861*61046927SAndroid Build Coastguard Worker
2862*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMIMIN - Atomic signed minimum
2863*61046927SAndroid Build Coastguard Worker
2864*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMIMIN dst, resource, offset, src``
2865*61046927SAndroid Build Coastguard Worker
2866*61046927SAndroid Build Coastguard Worker   Example: ``ATOMIMIN TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2867*61046927SAndroid Build Coastguard Worker
2868*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2869*61046927SAndroid Build Coastguard Worker
2870*61046927SAndroid Build Coastguard Worker   .. math::
2871*61046927SAndroid Build Coastguard Worker
2872*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2873*61046927SAndroid Build Coastguard Worker
2874*61046927SAndroid Build Coastguard Worker      resource[offset] = (dst_x < src_x ? dst_x : src_x)
2875*61046927SAndroid Build Coastguard Worker
2876*61046927SAndroid Build Coastguard Worker
2877*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMIMAX - Atomic signed maximum
2878*61046927SAndroid Build Coastguard Worker
2879*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMIMAX dst, resource, offset, src``
2880*61046927SAndroid Build Coastguard Worker
2881*61046927SAndroid Build Coastguard Worker   Example: ``ATOMIMAX TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2882*61046927SAndroid Build Coastguard Worker
2883*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2884*61046927SAndroid Build Coastguard Worker
2885*61046927SAndroid Build Coastguard Worker   .. math::
2886*61046927SAndroid Build Coastguard Worker
2887*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2888*61046927SAndroid Build Coastguard Worker
2889*61046927SAndroid Build Coastguard Worker      resource[offset] = (dst_x > src_x ? dst_x : src_x)
2890*61046927SAndroid Build Coastguard Worker
2891*61046927SAndroid Build Coastguard Worker
2892*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMINC_WRAP - Atomic increment + wrap around
2893*61046927SAndroid Build Coastguard Worker
2894*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMINC_WRAP dst, resource, offset, src``
2895*61046927SAndroid Build Coastguard Worker
2896*61046927SAndroid Build Coastguard Worker   Example: ``ATOMINC_WRAP TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2897*61046927SAndroid Build Coastguard Worker
2898*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2899*61046927SAndroid Build Coastguard Worker
2900*61046927SAndroid Build Coastguard Worker   .. math::
2901*61046927SAndroid Build Coastguard Worker
2902*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset] + 1
2903*61046927SAndroid Build Coastguard Worker
2904*61046927SAndroid Build Coastguard Worker      resource[offset] = dst_x <= src_x ? dst_x : 0
2905*61046927SAndroid Build Coastguard Worker
2906*61046927SAndroid Build Coastguard Worker
2907*61046927SAndroid Build Coastguard Worker.. opcode:: ATOMDEC_WRAP - Atomic decrement + wrap around
2908*61046927SAndroid Build Coastguard Worker
2909*61046927SAndroid Build Coastguard Worker   Syntax: ``ATOMDEC_WRAP dst, resource, offset, src``
2910*61046927SAndroid Build Coastguard Worker
2911*61046927SAndroid Build Coastguard Worker   Example: ``ATOMDEC_WRAP TEMP[0], BUFFER[0], TEMP[1], TEMP[2]``
2912*61046927SAndroid Build Coastguard Worker
2913*61046927SAndroid Build Coastguard Worker   The following operation is performed atomically:
2914*61046927SAndroid Build Coastguard Worker
2915*61046927SAndroid Build Coastguard Worker   .. math::
2916*61046927SAndroid Build Coastguard Worker
2917*61046927SAndroid Build Coastguard Worker      dst_x = resource[offset]
2918*61046927SAndroid Build Coastguard Worker
2919*61046927SAndroid Build Coastguard Worker      resource[offset] =
2920*61046927SAndroid Build Coastguard Worker      \left\{
2921*61046927SAndroid Build Coastguard Worker      \begin{array}{ c l }
2922*61046927SAndroid Build Coastguard Worker         dst_x - 1 & \quad \textrm{if } dst_x \gt 0 \textrm{ and } dst_x \lt src_x \\
2923*61046927SAndroid Build Coastguard Worker         0         & \quad \textrm{otherwise}
2924*61046927SAndroid Build Coastguard Worker      \end{array}
2925*61046927SAndroid Build Coastguard Worker      \right.
2926*61046927SAndroid Build Coastguard Worker
2927*61046927SAndroid Build Coastguard Worker.. _interlaneopcodes:
2928*61046927SAndroid Build Coastguard Worker
2929*61046927SAndroid Build Coastguard WorkerInter-lane opcodes
2930*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^
2931*61046927SAndroid Build Coastguard Worker
2932*61046927SAndroid Build Coastguard WorkerThese opcodes reduce the given value across the shader invocations
2933*61046927SAndroid Build Coastguard Workerrunning in the current SIMD group. Every thread in the subgroup will receive
2934*61046927SAndroid Build Coastguard Workerthe same result. The BALLOT operations accept a single-channel argument that
2935*61046927SAndroid Build Coastguard Workeris treated as a boolean and produce a 64-bit value.
2936*61046927SAndroid Build Coastguard Worker
2937*61046927SAndroid Build Coastguard Worker.. opcode:: VOTE_ANY - Value is set in any of the active invocations
2938*61046927SAndroid Build Coastguard Worker
2939*61046927SAndroid Build Coastguard Worker   Syntax: ``VOTE_ANY dst, value``
2940*61046927SAndroid Build Coastguard Worker
2941*61046927SAndroid Build Coastguard Worker   Example: ``VOTE_ANY TEMP[0].x, TEMP[1].x``
2942*61046927SAndroid Build Coastguard Worker
2943*61046927SAndroid Build Coastguard Worker
2944*61046927SAndroid Build Coastguard Worker.. opcode:: VOTE_ALL - Value is set in all of the active invocations
2945*61046927SAndroid Build Coastguard Worker
2946*61046927SAndroid Build Coastguard Worker   Syntax: ``VOTE_ALL dst, value``
2947*61046927SAndroid Build Coastguard Worker
2948*61046927SAndroid Build Coastguard Worker   Example: ``VOTE_ALL TEMP[0].x, TEMP[1].x``
2949*61046927SAndroid Build Coastguard Worker
2950*61046927SAndroid Build Coastguard Worker
2951*61046927SAndroid Build Coastguard Worker.. opcode:: VOTE_EQ - Value is the same in all of the active invocations
2952*61046927SAndroid Build Coastguard Worker
2953*61046927SAndroid Build Coastguard Worker   Syntax: ``VOTE_EQ dst, value``
2954*61046927SAndroid Build Coastguard Worker
2955*61046927SAndroid Build Coastguard Worker   Example: ``VOTE_EQ TEMP[0].x, TEMP[1].x``
2956*61046927SAndroid Build Coastguard Worker
2957*61046927SAndroid Build Coastguard Worker
2958*61046927SAndroid Build Coastguard Worker.. opcode:: BALLOT - Lanemask of whether the value is set in each active
2959*61046927SAndroid Build Coastguard Worker            invocation
2960*61046927SAndroid Build Coastguard Worker
2961*61046927SAndroid Build Coastguard Worker   Syntax: ``BALLOT dst, value``
2962*61046927SAndroid Build Coastguard Worker
2963*61046927SAndroid Build Coastguard Worker   Example: ``BALLOT TEMP[0].xy, TEMP[1].x``
2964*61046927SAndroid Build Coastguard Worker
2965*61046927SAndroid Build Coastguard Worker   When the argument is a constant true, this produces a bitmask of active
2966*61046927SAndroid Build Coastguard Worker   invocations. In fragment shaders, this can include helper invocations
2967*61046927SAndroid Build Coastguard Worker   (invocations whose outputs and writes to memory are discarded, but which
2968*61046927SAndroid Build Coastguard Worker   are used to compute derivatives).
2969*61046927SAndroid Build Coastguard Worker
2970*61046927SAndroid Build Coastguard Worker
2971*61046927SAndroid Build Coastguard Worker.. opcode:: READ_FIRST - Broadcast the value from the first active
2972*61046927SAndroid Build Coastguard Worker            invocation to all active lanes
2973*61046927SAndroid Build Coastguard Worker
2974*61046927SAndroid Build Coastguard Worker   Syntax: ``READ_FIRST dst, value``
2975*61046927SAndroid Build Coastguard Worker
2976*61046927SAndroid Build Coastguard Worker   Example: ``READ_FIRST TEMP[0], TEMP[1]``
2977*61046927SAndroid Build Coastguard Worker
2978*61046927SAndroid Build Coastguard Worker
2979*61046927SAndroid Build Coastguard Worker.. opcode:: READ_INVOC - Retrieve the value from the given invocation
2980*61046927SAndroid Build Coastguard Worker            (need not be uniform)
2981*61046927SAndroid Build Coastguard Worker
2982*61046927SAndroid Build Coastguard Worker   Syntax: ``READ_INVOC dst, value, invocation``
2983*61046927SAndroid Build Coastguard Worker
2984*61046927SAndroid Build Coastguard Worker   Example: ``READ_INVOC TEMP[0].xy, TEMP[1].xy, TEMP[2].x``
2985*61046927SAndroid Build Coastguard Worker
2986*61046927SAndroid Build Coastguard Worker   invocation.x controls the invocation number to read from for all channels.
2987*61046927SAndroid Build Coastguard Worker   The invocation number must be the same across all active invocations in a
2988*61046927SAndroid Build Coastguard Worker   sub-group; otherwise, the results are undefined.
2989*61046927SAndroid Build Coastguard Worker
2990*61046927SAndroid Build Coastguard Worker
2991*61046927SAndroid Build Coastguard WorkerExplanation of symbols used
2992*61046927SAndroid Build Coastguard Worker------------------------------
2993*61046927SAndroid Build Coastguard Worker
2994*61046927SAndroid Build Coastguard Worker
2995*61046927SAndroid Build Coastguard WorkerFunctions
2996*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^
2997*61046927SAndroid Build Coastguard Worker
2998*61046927SAndroid Build Coastguard Worker
2999*61046927SAndroid Build Coastguard Worker   :math:`|x|`       Absolute value of ``x``.
3000*61046927SAndroid Build Coastguard Worker
3001*61046927SAndroid Build Coastguard Worker   :math:`\lceil x \rceil` Ceiling of ``x``.
3002*61046927SAndroid Build Coastguard Worker
3003*61046927SAndroid Build Coastguard Worker   clamp(x,y,z)      Clamp x between y and z.
3004*61046927SAndroid Build Coastguard Worker                     (x < y) ? y : (x > z) ? z : x
3005*61046927SAndroid Build Coastguard Worker
3006*61046927SAndroid Build Coastguard Worker   :math:`\lfloor x\rfloor` Floor of ``x``.
3007*61046927SAndroid Build Coastguard Worker
3008*61046927SAndroid Build Coastguard Worker   :math:`\log_2{x}` Logarithm of ``x``, base 2.
3009*61046927SAndroid Build Coastguard Worker
3010*61046927SAndroid Build Coastguard Worker   max(x,y)          Maximum of x and y.
3011*61046927SAndroid Build Coastguard Worker                     (x > y) ? x : y
3012*61046927SAndroid Build Coastguard Worker
3013*61046927SAndroid Build Coastguard Worker   min(x,y)          Minimum of x and y.
3014*61046927SAndroid Build Coastguard Worker                     (x < y) ? x : y
3015*61046927SAndroid Build Coastguard Worker
3016*61046927SAndroid Build Coastguard Worker   partialx(x)       Derivative of x relative to fragment's X.
3017*61046927SAndroid Build Coastguard Worker
3018*61046927SAndroid Build Coastguard Worker   partialy(x)       Derivative of x relative to fragment's Y.
3019*61046927SAndroid Build Coastguard Worker
3020*61046927SAndroid Build Coastguard Worker   pop()             Pop from stack.
3021*61046927SAndroid Build Coastguard Worker
3022*61046927SAndroid Build Coastguard Worker   :math:`x^y`       ``x`` to the power ``y``.
3023*61046927SAndroid Build Coastguard Worker
3024*61046927SAndroid Build Coastguard Worker   push(x)           Push x on stack.
3025*61046927SAndroid Build Coastguard Worker
3026*61046927SAndroid Build Coastguard Worker   round(x)          Round x.
3027*61046927SAndroid Build Coastguard Worker
3028*61046927SAndroid Build Coastguard Worker   trunc(x)          Truncate x, i.e. drop the fraction bits.
3029*61046927SAndroid Build Coastguard Worker
3030*61046927SAndroid Build Coastguard Worker
3031*61046927SAndroid Build Coastguard WorkerKeywords
3032*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^
3033*61046927SAndroid Build Coastguard Worker
3034*61046927SAndroid Build Coastguard Worker
3035*61046927SAndroid Build Coastguard Worker   discard           Discard fragment.
3036*61046927SAndroid Build Coastguard Worker
3037*61046927SAndroid Build Coastguard Worker   pc                Program counter.
3038*61046927SAndroid Build Coastguard Worker
3039*61046927SAndroid Build Coastguard Worker   target            Label of target instruction.
3040*61046927SAndroid Build Coastguard Worker
3041*61046927SAndroid Build Coastguard Worker
3042*61046927SAndroid Build Coastguard WorkerOther tokens
3043*61046927SAndroid Build Coastguard Worker---------------
3044*61046927SAndroid Build Coastguard Worker
3045*61046927SAndroid Build Coastguard Worker
3046*61046927SAndroid Build Coastguard WorkerDeclaration
3047*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^
3048*61046927SAndroid Build Coastguard Worker
3049*61046927SAndroid Build Coastguard Worker
3050*61046927SAndroid Build Coastguard WorkerDeclares a register that is will be referenced as an operand in Instruction
3051*61046927SAndroid Build Coastguard Workertokens.
3052*61046927SAndroid Build Coastguard Worker
3053*61046927SAndroid Build Coastguard WorkerFile field contains register file that is being declared and is one
3054*61046927SAndroid Build Coastguard Workerof TGSI_FILE.
3055*61046927SAndroid Build Coastguard Worker
3056*61046927SAndroid Build Coastguard WorkerUsageMask field specifies which of the register components can be accessed
3057*61046927SAndroid Build Coastguard Workerand is one of TGSI_WRITEMASK.
3058*61046927SAndroid Build Coastguard Worker
3059*61046927SAndroid Build Coastguard WorkerThe Local flag specifies that a given value isn't intended for
3060*61046927SAndroid Build Coastguard Workersubroutine parameter passing and, as a result, the implementation
3061*61046927SAndroid Build Coastguard Workerisn't required to give any guarantees of it being preserved across
3062*61046927SAndroid Build Coastguard Workersubroutine boundaries.  As it's merely a compiler hint, the
3063*61046927SAndroid Build Coastguard Workerimplementation is free to ignore it.
3064*61046927SAndroid Build Coastguard Worker
3065*61046927SAndroid Build Coastguard WorkerIf Dimension flag is set to 1, a Declaration Dimension token follows.
3066*61046927SAndroid Build Coastguard Worker
3067*61046927SAndroid Build Coastguard WorkerIf Semantic flag is set to 1, a Declaration Semantic token follows.
3068*61046927SAndroid Build Coastguard Worker
3069*61046927SAndroid Build Coastguard WorkerIf Interpolate flag is set to 1, a Declaration Interpolate token follows.
3070*61046927SAndroid Build Coastguard Worker
3071*61046927SAndroid Build Coastguard WorkerIf file is TGSI_FILE_RESOURCE, a Declaration Resource token follows.
3072*61046927SAndroid Build Coastguard Worker
3073*61046927SAndroid Build Coastguard WorkerIf Array flag is set to 1, a Declaration Array token follows.
3074*61046927SAndroid Build Coastguard Worker
3075*61046927SAndroid Build Coastguard WorkerArray Declaration
3076*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^
3077*61046927SAndroid Build Coastguard Worker
3078*61046927SAndroid Build Coastguard WorkerDeclarations can optional have an ArrayID attribute which can be referred by
3079*61046927SAndroid Build Coastguard Workerindirect addressing operands. An ArrayID of zero is reserved and treated as
3080*61046927SAndroid Build Coastguard Workerif no ArrayID is specified.
3081*61046927SAndroid Build Coastguard Worker
3082*61046927SAndroid Build Coastguard WorkerIf an indirect addressing operand refers to a specific declaration by using
3083*61046927SAndroid Build Coastguard Workeran ArrayID only the registers in this declaration are guaranteed to be
3084*61046927SAndroid Build Coastguard Workeraccessed, accessing any register outside this declaration results in undefined
3085*61046927SAndroid Build Coastguard Workerbehavior. Note that for compatibility the effective index is zero-based and
3086*61046927SAndroid Build Coastguard Workernot relative to the specified declaration
3087*61046927SAndroid Build Coastguard Worker
3088*61046927SAndroid Build Coastguard WorkerIf no ArrayID is specified with an indirect addressing operand the whole
3089*61046927SAndroid Build Coastguard Workerregister file might be accessed by this operand. This is strongly discouraged
3090*61046927SAndroid Build Coastguard Workerand will prevent packing of scalar/vec2 arrays and effective alias analysis.
3091*61046927SAndroid Build Coastguard WorkerThis is only legal for TEMP and CONST register files.
3092*61046927SAndroid Build Coastguard Worker
3093*61046927SAndroid Build Coastguard WorkerDeclaration Semantic
3094*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^
3095*61046927SAndroid Build Coastguard Worker
3096*61046927SAndroid Build Coastguard WorkerVertex and fragment shader input and output registers may be labeled
3097*61046927SAndroid Build Coastguard Workerwith semantic information consisting of a name and index.
3098*61046927SAndroid Build Coastguard Worker
3099*61046927SAndroid Build Coastguard WorkerFollows Declaration token if Semantic bit is set.
3100*61046927SAndroid Build Coastguard Worker
3101*61046927SAndroid Build Coastguard WorkerSince its purpose is to link a shader with other stages of the pipeline,
3102*61046927SAndroid Build Coastguard Workerit is valid to follow only those Declaration tokens that declare a register
3103*61046927SAndroid Build Coastguard Workereither in INPUT or OUTPUT file.
3104*61046927SAndroid Build Coastguard Worker
3105*61046927SAndroid Build Coastguard WorkerSemanticName field contains the semantic name of the register being declared.
3106*61046927SAndroid Build Coastguard WorkerThere is no default value.
3107*61046927SAndroid Build Coastguard Worker
3108*61046927SAndroid Build Coastguard WorkerSemanticIndex is an optional subscript that can be used to distinguish
3109*61046927SAndroid Build Coastguard Workerdifferent register declarations with the same semantic name. The default value
3110*61046927SAndroid Build Coastguard Workeris 0.
3111*61046927SAndroid Build Coastguard Worker
3112*61046927SAndroid Build Coastguard WorkerThe meanings of the individual semantic names are explained in the following
3113*61046927SAndroid Build Coastguard Workersections.
3114*61046927SAndroid Build Coastguard Worker
3115*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_POSITION
3116*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3117*61046927SAndroid Build Coastguard Worker
3118*61046927SAndroid Build Coastguard WorkerFor vertex shaders, TGSI_SEMANTIC_POSITION indicates the vertex shader
3119*61046927SAndroid Build Coastguard Workeroutput register which contains the homogeneous vertex position in the clip
3120*61046927SAndroid Build Coastguard Workerspace coordinate system.  After clipping, the X, Y and Z components of the
3121*61046927SAndroid Build Coastguard Workervertex will be divided by the W value to get normalized device coordinates.
3122*61046927SAndroid Build Coastguard Worker
3123*61046927SAndroid Build Coastguard WorkerFor fragment shaders, TGSI_SEMANTIC_POSITION is used to indicate that
3124*61046927SAndroid Build Coastguard Workerfragment shader input (or system value, depending on which one is
3125*61046927SAndroid Build Coastguard Workersupported by the driver) contains the fragment's window position.  The X
3126*61046927SAndroid Build Coastguard Workercomponent starts at zero and always increases from left to right.
3127*61046927SAndroid Build Coastguard WorkerThe Y component starts at zero and always increases but Y=0 may either
3128*61046927SAndroid Build Coastguard Workerindicate the top of the window or the bottom depending on the fragment
3129*61046927SAndroid Build Coastguard Workercoordinate origin convention (see TGSI_PROPERTY_FS_COORD_ORIGIN).
3130*61046927SAndroid Build Coastguard WorkerThe Z coordinate ranges from 0 to 1 to represent depth from the front
3131*61046927SAndroid Build Coastguard Workerto the back of the Z buffer.  The W component contains the interpolated
3132*61046927SAndroid Build Coastguard Workerreciprocal of the vertex position W component (corresponding to gl_Fragcoord,
3133*61046927SAndroid Build Coastguard Workerbut unlike d3d10 which interpolates the same 1/w but then gives back
3134*61046927SAndroid Build Coastguard Workerthe reciprocal of the interpolated value).
3135*61046927SAndroid Build Coastguard Worker
3136*61046927SAndroid Build Coastguard WorkerFragment shaders may also declare an output register with
3137*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_POSITION.  Only the Z component is writable.  This allows
3138*61046927SAndroid Build Coastguard Workerthe fragment shader to change the fragment's Z position.
3139*61046927SAndroid Build Coastguard Worker
3140*61046927SAndroid Build Coastguard Worker
3141*61046927SAndroid Build Coastguard Worker
3142*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_COLOR
3143*61046927SAndroid Build Coastguard Worker"""""""""""""""""""
3144*61046927SAndroid Build Coastguard Worker
3145*61046927SAndroid Build Coastguard WorkerFor vertex shader outputs or fragment shader inputs/outputs, this
3146*61046927SAndroid Build Coastguard Workerlabel indicates that the register contains an R,G,B,A color.
3147*61046927SAndroid Build Coastguard Worker
3148*61046927SAndroid Build Coastguard WorkerSeveral shader inputs/outputs may contain colors so the semantic index
3149*61046927SAndroid Build Coastguard Workeris used to distinguish them.  For example, color[0] may be the diffuse
3150*61046927SAndroid Build Coastguard Workercolor while color[1] may be the specular color.
3151*61046927SAndroid Build Coastguard Worker
3152*61046927SAndroid Build Coastguard WorkerThis label is needed so that the flat/smooth shading can be applied
3153*61046927SAndroid Build Coastguard Workerto the right interpolants during rasterization.
3154*61046927SAndroid Build Coastguard Worker
3155*61046927SAndroid Build Coastguard Worker
3156*61046927SAndroid Build Coastguard Worker
3157*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_BCOLOR
3158*61046927SAndroid Build Coastguard Worker""""""""""""""""""""
3159*61046927SAndroid Build Coastguard Worker
3160*61046927SAndroid Build Coastguard WorkerBack-facing colors are only used for back-facing polygons, and are only valid
3161*61046927SAndroid Build Coastguard Workerin vertex shader outputs. After rasterization, all polygons are front-facing
3162*61046927SAndroid Build Coastguard Workerand COLOR and BCOLOR end up occupying the same slots in the fragment shader,
3163*61046927SAndroid Build Coastguard Workerso all BCOLORs effectively become regular COLORs in the fragment shader.
3164*61046927SAndroid Build Coastguard Worker
3165*61046927SAndroid Build Coastguard Worker
3166*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_FOG
3167*61046927SAndroid Build Coastguard Worker"""""""""""""""""
3168*61046927SAndroid Build Coastguard Worker
3169*61046927SAndroid Build Coastguard WorkerVertex shader inputs and outputs and fragment shader inputs may be
3170*61046927SAndroid Build Coastguard Workerlabeled with TGSI_SEMANTIC_FOG to indicate that the register contains
3171*61046927SAndroid Build Coastguard Workera fog coordinate.  Typically, the fragment shader will use the fog coordinate
3172*61046927SAndroid Build Coastguard Workerto compute a fog blend factor which is used to blend the normal fragment color
3173*61046927SAndroid Build Coastguard Workerwith a constant fog color.  But fog coord really is just an ordinary vec4
3174*61046927SAndroid Build Coastguard Workerregister like regular semantics.
3175*61046927SAndroid Build Coastguard Worker
3176*61046927SAndroid Build Coastguard Worker
3177*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_PSIZE
3178*61046927SAndroid Build Coastguard Worker"""""""""""""""""""
3179*61046927SAndroid Build Coastguard Worker
3180*61046927SAndroid Build Coastguard WorkerVertex shader input and output registers may be labeled with
3181*61046927SAndroid Build Coastguard WorkerTGIS_SEMANTIC_PSIZE to indicate that the register contains a point size
3182*61046927SAndroid Build Coastguard Workerin the form (S, 0, 0, 1).  The point size controls the width or diameter
3183*61046927SAndroid Build Coastguard Workerof points for rasterization.  This label cannot be used in fragment
3184*61046927SAndroid Build Coastguard Workershaders.
3185*61046927SAndroid Build Coastguard Worker
3186*61046927SAndroid Build Coastguard WorkerWhen using this semantic, be sure to set the appropriate state in the
3187*61046927SAndroid Build Coastguard Worker:ref:`rasterizer` first.
3188*61046927SAndroid Build Coastguard Worker
3189*61046927SAndroid Build Coastguard Worker
3190*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_TEXCOORD
3191*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3192*61046927SAndroid Build Coastguard Worker
3193*61046927SAndroid Build Coastguard WorkerOnly available if PIPE_CAP_TGSI_TEXCOORD is exposed !
3194*61046927SAndroid Build Coastguard Worker
3195*61046927SAndroid Build Coastguard WorkerVertex shader outputs and fragment shader inputs may be labeled with
3196*61046927SAndroid Build Coastguard Workerthis semantic to make them replaceable by sprite coordinates via the
3197*61046927SAndroid Build Coastguard Workersprite_coord_enable state in the :ref:`rasterizer`.
3198*61046927SAndroid Build Coastguard WorkerThe semantic index permitted with this semantic is limited to <= 7.
3199*61046927SAndroid Build Coastguard Worker
3200*61046927SAndroid Build Coastguard WorkerIf the driver does not support TEXCOORD, sprite coordinate replacement
3201*61046927SAndroid Build Coastguard Workerapplies to inputs with the GENERIC semantic instead.
3202*61046927SAndroid Build Coastguard Worker
3203*61046927SAndroid Build Coastguard WorkerThe intended use case for this semantic is gl_TexCoord.
3204*61046927SAndroid Build Coastguard Worker
3205*61046927SAndroid Build Coastguard Worker
3206*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_PCOORD
3207*61046927SAndroid Build Coastguard Worker""""""""""""""""""""
3208*61046927SAndroid Build Coastguard Worker
3209*61046927SAndroid Build Coastguard WorkerOnly available if PIPE_CAP_TGSI_TEXCOORD is exposed !
3210*61046927SAndroid Build Coastguard Worker
3211*61046927SAndroid Build Coastguard WorkerFragment shader inputs may be labeled with TGSI_SEMANTIC_PCOORD to indicate
3212*61046927SAndroid Build Coastguard Workerthat the register contains sprite coordinates in the form (x, y, 0, 1), if
3213*61046927SAndroid Build Coastguard Workerthe current primitive is a point and point sprites are enabled. Otherwise,
3214*61046927SAndroid Build Coastguard Workerthe contents of the register are undefined.
3215*61046927SAndroid Build Coastguard Worker
3216*61046927SAndroid Build Coastguard WorkerThe intended use case for this semantic is gl_PointCoord.
3217*61046927SAndroid Build Coastguard Worker
3218*61046927SAndroid Build Coastguard Worker
3219*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_GENERIC
3220*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""
3221*61046927SAndroid Build Coastguard Worker
3222*61046927SAndroid Build Coastguard WorkerAll vertex/fragment shader inputs/outputs not labeled with any other
3223*61046927SAndroid Build Coastguard Workersemantic label can be considered to be generic attributes.  Typical
3224*61046927SAndroid Build Coastguard Workeruses of generic inputs/outputs are texcoords and user-defined values.
3225*61046927SAndroid Build Coastguard Worker
3226*61046927SAndroid Build Coastguard Worker
3227*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_NORMAL
3228*61046927SAndroid Build Coastguard Worker""""""""""""""""""""
3229*61046927SAndroid Build Coastguard Worker
3230*61046927SAndroid Build Coastguard WorkerIndicates that a vertex shader input is a normal vector.  This is
3231*61046927SAndroid Build Coastguard Workertypically only used for legacy graphics APIs.
3232*61046927SAndroid Build Coastguard Worker
3233*61046927SAndroid Build Coastguard Worker
3234*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_FACE
3235*61046927SAndroid Build Coastguard Worker""""""""""""""""""
3236*61046927SAndroid Build Coastguard Worker
3237*61046927SAndroid Build Coastguard WorkerThis label applies to fragment shader inputs (or system values,
3238*61046927SAndroid Build Coastguard Workerdepending on which one is supported by the driver) and indicates that
3239*61046927SAndroid Build Coastguard Workerthe register contains front/back-face information.
3240*61046927SAndroid Build Coastguard Worker
3241*61046927SAndroid Build Coastguard WorkerIf it is an input, it will be a floating-point vector in the form (F, 0, 0, 1),
3242*61046927SAndroid Build Coastguard Workerwhere F will be positive when the fragment belongs to a front-facing polygon,
3243*61046927SAndroid Build Coastguard Workerand negative when the fragment belongs to a back-facing polygon.
3244*61046927SAndroid Build Coastguard Worker
3245*61046927SAndroid Build Coastguard WorkerIf it is a system value, it will be an integer vector in the form (F, 0, 0, 1),
3246*61046927SAndroid Build Coastguard Workerwhere F is ``0xffffffff`` when the fragment belongs to a front-facing polygon
3247*61046927SAndroid Build Coastguard Workerand ``0`` when the fragment belongs to a back-facing polygon.
3248*61046927SAndroid Build Coastguard Worker
3249*61046927SAndroid Build Coastguard Worker
3250*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_EDGEFLAG
3251*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3252*61046927SAndroid Build Coastguard Worker
3253*61046927SAndroid Build Coastguard WorkerFor vertex shaders, this semantic label indicates that an input or
3254*61046927SAndroid Build Coastguard Workeroutput is a boolean edge flag.  The register layout is [F, x, x, x]
3255*61046927SAndroid Build Coastguard Workerwhere F is 0.0 or 1.0 and x = don't care.  Normally, the vertex shader
3256*61046927SAndroid Build Coastguard Workersimply copies the edge flag input to the edge flag output.
3257*61046927SAndroid Build Coastguard Worker
3258*61046927SAndroid Build Coastguard WorkerEdge flags are used to control which lines or points are actually
3259*61046927SAndroid Build Coastguard Workerdrawn when the polygon mode converts triangles/quads/polygons into
3260*61046927SAndroid Build Coastguard Workerpoints or lines.
3261*61046927SAndroid Build Coastguard Worker
3262*61046927SAndroid Build Coastguard Worker
3263*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_STENCIL
3264*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""
3265*61046927SAndroid Build Coastguard Worker
3266*61046927SAndroid Build Coastguard WorkerFor fragment shaders, this semantic label indicates that an output
3267*61046927SAndroid Build Coastguard Workeris a writable stencil reference value. Only the Y component is writable.
3268*61046927SAndroid Build Coastguard WorkerThis allows the fragment shader to change the fragments stencil reference
3269*61046927SAndroid Build Coastguard Workervalue.
3270*61046927SAndroid Build Coastguard Worker
3271*61046927SAndroid Build Coastguard Worker
3272*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_VIEWPORT_INDEX
3273*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""
3274*61046927SAndroid Build Coastguard Worker
3275*61046927SAndroid Build Coastguard WorkerFor geometry shaders, this semantic label indicates that an output
3276*61046927SAndroid Build Coastguard Workercontains the index of the viewport (and scissor) to use.
3277*61046927SAndroid Build Coastguard WorkerThis is an integer value, and only the X component is used.
3278*61046927SAndroid Build Coastguard Worker
3279*61046927SAndroid Build Coastguard WorkerIf PIPE_CAP_VS_LAYER_VIEWPORT or PIPE_CAP_TES_LAYER_VIEWPORT is
3280*61046927SAndroid Build Coastguard Workersupported, then this semantic label can also be used in vertex or
3281*61046927SAndroid Build Coastguard Workertessellation evaluation shaders, respectively. Only the value written in the
3282*61046927SAndroid Build Coastguard Workerlast vertex processing stage is used.
3283*61046927SAndroid Build Coastguard Worker
3284*61046927SAndroid Build Coastguard Worker
3285*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_LAYER
3286*61046927SAndroid Build Coastguard Worker"""""""""""""""""""
3287*61046927SAndroid Build Coastguard Worker
3288*61046927SAndroid Build Coastguard WorkerFor geometry shaders, this semantic label indicates that an output
3289*61046927SAndroid Build Coastguard Workercontains the layer value to use for the color and depth/stencil surfaces.
3290*61046927SAndroid Build Coastguard WorkerThis is an integer value, and only the X component is used.
3291*61046927SAndroid Build Coastguard Worker(Also known as rendertarget array index.)
3292*61046927SAndroid Build Coastguard Worker
3293*61046927SAndroid Build Coastguard WorkerIf PIPE_CAP_VS_LAYER_VIEWPORT or PIPE_CAP_TES_LAYER_VIEWPORT is
3294*61046927SAndroid Build Coastguard Workersupported, then this semantic label can also be used in vertex or
3295*61046927SAndroid Build Coastguard Workertessellation evaluation shaders, respectively. Only the value written in the
3296*61046927SAndroid Build Coastguard Workerlast vertex processing stage is used.
3297*61046927SAndroid Build Coastguard Worker
3298*61046927SAndroid Build Coastguard Worker
3299*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_CLIPDIST
3300*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3301*61046927SAndroid Build Coastguard Worker
3302*61046927SAndroid Build Coastguard WorkerNote this covers clipping and culling distances.
3303*61046927SAndroid Build Coastguard Worker
3304*61046927SAndroid Build Coastguard WorkerWhen components of vertex elements are identified this way, these
3305*61046927SAndroid Build Coastguard Workervalues are each assumed to be a float32 signed distance to a plane.
3306*61046927SAndroid Build Coastguard Worker
3307*61046927SAndroid Build Coastguard WorkerFor clip distances:
3308*61046927SAndroid Build Coastguard WorkerPrimitive setup only invokes rasterization on pixels for which
3309*61046927SAndroid Build Coastguard Workerthe interpolated plane distances are >= 0.
3310*61046927SAndroid Build Coastguard Worker
3311*61046927SAndroid Build Coastguard WorkerFor cull distances:
3312*61046927SAndroid Build Coastguard WorkerPrimitives will be completely discarded if the plane distance
3313*61046927SAndroid Build Coastguard Workerfor all of the vertices in the primitive are < 0.
3314*61046927SAndroid Build Coastguard WorkerIf a vertex has a cull distance of NaN, that vertex counts as "out"
3315*61046927SAndroid Build Coastguard Worker(as if its < 0);
3316*61046927SAndroid Build Coastguard Worker
3317*61046927SAndroid Build Coastguard WorkerMultiple clip/cull planes can be implemented simultaneously, by
3318*61046927SAndroid Build Coastguard Workerannotating multiple components of one or more vertex elements with
3319*61046927SAndroid Build Coastguard Workerthe above specified semantic.
3320*61046927SAndroid Build Coastguard WorkerThe limits on both clip and cull distances are bound
3321*61046927SAndroid Build Coastguard Workerby the PIPE_MAX_CLIP_OR_CULL_DISTANCE_COUNT define which defines
3322*61046927SAndroid Build Coastguard Workerthe maximum number of components that can be used to hold the
3323*61046927SAndroid Build Coastguard Workerdistances and by the PIPE_MAX_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT
3324*61046927SAndroid Build Coastguard Workerwhich specifies the maximum number of registers which can be
3325*61046927SAndroid Build Coastguard Workerannotated with those semantics.
3326*61046927SAndroid Build Coastguard WorkerThe properties NUM_CLIPDIST_ENABLED and NUM_CULLDIST_ENABLED
3327*61046927SAndroid Build Coastguard Workerare used to divide up the 2 x vec4 space between clipping and culling.
3328*61046927SAndroid Build Coastguard Worker
3329*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SAMPLEID
3330*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3331*61046927SAndroid Build Coastguard Worker
3332*61046927SAndroid Build Coastguard WorkerFor fragment shaders, this semantic label indicates that a system value
3333*61046927SAndroid Build Coastguard Workercontains the current sample id (i.e. gl_SampleID) as an unsigned int.
3334*61046927SAndroid Build Coastguard WorkerOnly the X component is used.  If per-sample shading is not enabled,
3335*61046927SAndroid Build Coastguard Workerthe result is (0, undef, undef, undef).
3336*61046927SAndroid Build Coastguard Worker
3337*61046927SAndroid Build Coastguard WorkerNote that if the fragment shader uses this system value, the fragment
3338*61046927SAndroid Build Coastguard Workershader is automatically executed at per sample frequency.
3339*61046927SAndroid Build Coastguard Worker
3340*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SAMPLEPOS
3341*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""
3342*61046927SAndroid Build Coastguard Worker
3343*61046927SAndroid Build Coastguard WorkerFor fragment shaders, this semantic label indicates that a system
3344*61046927SAndroid Build Coastguard Workervalue contains the current sample's position as float4(x, y, undef, undef)
3345*61046927SAndroid Build Coastguard Workerin the render target (i.e.  gl_SamplePosition) when per-fragment shading
3346*61046927SAndroid Build Coastguard Workeris in effect.  Position values are in the range [0, 1] where 0.5 is
3347*61046927SAndroid Build Coastguard Workerthe center of the fragment.
3348*61046927SAndroid Build Coastguard Worker
3349*61046927SAndroid Build Coastguard WorkerNote that if the fragment shader uses this system value, the fragment
3350*61046927SAndroid Build Coastguard Workershader is automatically executed at per sample frequency.
3351*61046927SAndroid Build Coastguard Worker
3352*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SAMPLEMASK
3353*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""
3354*61046927SAndroid Build Coastguard Worker
3355*61046927SAndroid Build Coastguard WorkerFor fragment shaders, this semantic label can be applied to either a
3356*61046927SAndroid Build Coastguard Workershader system value input or output.
3357*61046927SAndroid Build Coastguard Worker
3358*61046927SAndroid Build Coastguard WorkerFor a system value, the sample mask indicates the set of samples covered by
3359*61046927SAndroid Build Coastguard Workerthe current primitive.  If MSAA is not enabled, the value is (1, 0, 0, 0).
3360*61046927SAndroid Build Coastguard Worker
3361*61046927SAndroid Build Coastguard WorkerFor an output, the sample mask is used to disable further sample processing.
3362*61046927SAndroid Build Coastguard Worker
3363*61046927SAndroid Build Coastguard WorkerFor both, the register type is uint[4] but only the X component is used
3364*61046927SAndroid Build Coastguard Worker(i.e. gl_SampleMask[0]). Each bit corresponds to one sample position (up
3365*61046927SAndroid Build Coastguard Workerto 32x MSAA is supported).
3366*61046927SAndroid Build Coastguard Worker
3367*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_INVOCATIONID
3368*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""
3369*61046927SAndroid Build Coastguard Worker
3370*61046927SAndroid Build Coastguard WorkerFor geometry shaders, this semantic label indicates that a system value
3371*61046927SAndroid Build Coastguard Workercontains the current invocation id (i.e. gl_InvocationID).
3372*61046927SAndroid Build Coastguard WorkerThis is an integer value, and only the X component is used.
3373*61046927SAndroid Build Coastguard Worker
3374*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_INSTANCEID
3375*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""
3376*61046927SAndroid Build Coastguard Worker
3377*61046927SAndroid Build Coastguard WorkerFor vertex shaders, this semantic label indicates that a system value contains
3378*61046927SAndroid Build Coastguard Workerthe current instance id (i.e. gl_InstanceID). It does not include the base
3379*61046927SAndroid Build Coastguard Workerinstance. This is an integer value, and only the X component is used.
3380*61046927SAndroid Build Coastguard Worker
3381*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_VERTEXID
3382*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3383*61046927SAndroid Build Coastguard Worker
3384*61046927SAndroid Build Coastguard WorkerFor vertex shaders, this semantic label indicates that a system value contains
3385*61046927SAndroid Build Coastguard Workerthe current vertex id (i.e. gl_VertexID). It does (unlike in d3d10) include the
3386*61046927SAndroid Build Coastguard Workerbase vertex. This is an integer value, and only the X component is used.
3387*61046927SAndroid Build Coastguard Worker
3388*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_VERTEXID_NOBASE
3389*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""""""""""
3390*61046927SAndroid Build Coastguard Worker
3391*61046927SAndroid Build Coastguard WorkerFor vertex shaders, this semantic label indicates that a system value contains
3392*61046927SAndroid Build Coastguard Workerthe current vertex id without including the base vertex (this corresponds to
3393*61046927SAndroid Build Coastguard Workerd3d10 vertex id, so TGSI_SEMANTIC_VERTEXID_NOBASE + TGSI_SEMANTIC_BASEVERTEX
3394*61046927SAndroid Build Coastguard Worker== TGSI_SEMANTIC_VERTEXID). This is an integer value, and only the X component
3395*61046927SAndroid Build Coastguard Workeris used.
3396*61046927SAndroid Build Coastguard Worker
3397*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_BASEVERTEX
3398*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""
3399*61046927SAndroid Build Coastguard Worker
3400*61046927SAndroid Build Coastguard WorkerFor vertex shaders, this semantic label indicates that a system value contains
3401*61046927SAndroid Build Coastguard Workerthe base vertex (i.e. gl_BaseVertex). Note that for non-indexed draw calls,
3402*61046927SAndroid Build Coastguard Workerthis contains the first (or start) value instead.
3403*61046927SAndroid Build Coastguard WorkerThis is an integer value, and only the X component is used.
3404*61046927SAndroid Build Coastguard Worker
3405*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_PRIMID
3406*61046927SAndroid Build Coastguard Worker""""""""""""""""""""
3407*61046927SAndroid Build Coastguard Worker
3408*61046927SAndroid Build Coastguard WorkerFor geometry and fragment shaders, this semantic label indicates the value
3409*61046927SAndroid Build Coastguard Workercontains the primitive id (i.e. gl_PrimitiveID). This is an integer value,
3410*61046927SAndroid Build Coastguard Workerand only the X component is used.
3411*61046927SAndroid Build Coastguard WorkerFIXME: This right now can be either a ordinary input or a system value...
3412*61046927SAndroid Build Coastguard Worker
3413*61046927SAndroid Build Coastguard Worker
3414*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_PATCH
3415*61046927SAndroid Build Coastguard Worker"""""""""""""""""""
3416*61046927SAndroid Build Coastguard Worker
3417*61046927SAndroid Build Coastguard WorkerFor tessellation evaluation/control shaders, this semantic label indicates a
3418*61046927SAndroid Build Coastguard Workergeneric per-patch attribute. Such semantics will not implicitly be per-vertex
3419*61046927SAndroid Build Coastguard Workerarrays.
3420*61046927SAndroid Build Coastguard Worker
3421*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_TESSCOORD
3422*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""
3423*61046927SAndroid Build Coastguard Worker
3424*61046927SAndroid Build Coastguard WorkerFor tessellation evaluation shaders, this semantic label indicates the
3425*61046927SAndroid Build Coastguard Workercoordinates of the vertex being processed. This is available in XYZ; W is
3426*61046927SAndroid Build Coastguard Workerundefined.
3427*61046927SAndroid Build Coastguard Worker
3428*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_TESSOUTER
3429*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""
3430*61046927SAndroid Build Coastguard Worker
3431*61046927SAndroid Build Coastguard WorkerFor tessellation evaluation/control shaders, this semantic label indicates the
3432*61046927SAndroid Build Coastguard Workerouter tessellation levels of the patch. Isoline tessellation will only have XY
3433*61046927SAndroid Build Coastguard Workerdefined, triangle will have XYZ and quads will have XYZW defined. This
3434*61046927SAndroid Build Coastguard Workercorresponds to gl_TessLevelOuter.
3435*61046927SAndroid Build Coastguard Worker
3436*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_TESSINNER
3437*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""
3438*61046927SAndroid Build Coastguard Worker
3439*61046927SAndroid Build Coastguard WorkerFor tessellation evaluation/control shaders, this semantic label indicates the
3440*61046927SAndroid Build Coastguard Workerinner tessellation levels of the patch. The X value is only defined for
3441*61046927SAndroid Build Coastguard Workertriangle tessellation, while quads will have XY defined. This is entirely
3442*61046927SAndroid Build Coastguard Workerundefined for isoline tessellation.
3443*61046927SAndroid Build Coastguard Worker
3444*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_VERTICESIN
3445*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""
3446*61046927SAndroid Build Coastguard Worker
3447*61046927SAndroid Build Coastguard WorkerFor tessellation evaluation/control shaders, this semantic label indicates the
3448*61046927SAndroid Build Coastguard Workernumber of vertices provided in the input patch. Only the X value is defined.
3449*61046927SAndroid Build Coastguard Worker
3450*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_HELPER_INVOCATION
3451*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""""""""""
3452*61046927SAndroid Build Coastguard Worker
3453*61046927SAndroid Build Coastguard WorkerFor fragment shaders, this semantic indicates whether the current
3454*61046927SAndroid Build Coastguard Workerinvocation is covered or not. Helper invocations are created in order
3455*61046927SAndroid Build Coastguard Workerto properly compute derivatives, however it may be desirable to skip
3456*61046927SAndroid Build Coastguard Workersome of the logic in those cases. See ``gl_HelperInvocation`` documentation.
3457*61046927SAndroid Build Coastguard Worker
3458*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_BASEINSTANCE
3459*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""
3460*61046927SAndroid Build Coastguard Worker
3461*61046927SAndroid Build Coastguard WorkerFor vertex shaders, the base instance argument supplied for this
3462*61046927SAndroid Build Coastguard Workerdraw. This is an integer value, and only the X component is used.
3463*61046927SAndroid Build Coastguard Worker
3464*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_DRAWID
3465*61046927SAndroid Build Coastguard Worker""""""""""""""""""""
3466*61046927SAndroid Build Coastguard Worker
3467*61046927SAndroid Build Coastguard WorkerFor vertex shaders, the zero-based index of the current draw in a
3468*61046927SAndroid Build Coastguard Worker``glMultiDraw*`` invocation. This is an integer value, and only the X
3469*61046927SAndroid Build Coastguard Workercomponent is used.
3470*61046927SAndroid Build Coastguard Worker
3471*61046927SAndroid Build Coastguard Worker
3472*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_WORK_DIM
3473*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3474*61046927SAndroid Build Coastguard Worker
3475*61046927SAndroid Build Coastguard WorkerFor compute shaders started via OpenCL this retrieves the work_dim
3476*61046927SAndroid Build Coastguard Workerparameter to the clEnqueueNDRangeKernel call with which the shader
3477*61046927SAndroid Build Coastguard Workerwas started.
3478*61046927SAndroid Build Coastguard Worker
3479*61046927SAndroid Build Coastguard Worker
3480*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_GRID_SIZE
3481*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""
3482*61046927SAndroid Build Coastguard Worker
3483*61046927SAndroid Build Coastguard WorkerFor compute shaders, this semantic indicates the maximum (x, y, z) dimensions
3484*61046927SAndroid Build Coastguard Workerof a grid of thread blocks.
3485*61046927SAndroid Build Coastguard Worker
3486*61046927SAndroid Build Coastguard Worker
3487*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_BLOCK_ID
3488*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3489*61046927SAndroid Build Coastguard Worker
3490*61046927SAndroid Build Coastguard WorkerFor compute shaders, this semantic indicates the (x, y, z) coordinates of the
3491*61046927SAndroid Build Coastguard Workercurrent block inside of the grid.
3492*61046927SAndroid Build Coastguard Worker
3493*61046927SAndroid Build Coastguard Worker
3494*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_BLOCK_SIZE
3495*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""
3496*61046927SAndroid Build Coastguard Worker
3497*61046927SAndroid Build Coastguard WorkerFor compute shaders, this semantic indicates the maximum (x, y, z) dimensions
3498*61046927SAndroid Build Coastguard Workerof a block in threads.
3499*61046927SAndroid Build Coastguard Worker
3500*61046927SAndroid Build Coastguard Worker
3501*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_THREAD_ID
3502*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""
3503*61046927SAndroid Build Coastguard Worker
3504*61046927SAndroid Build Coastguard WorkerFor compute shaders, this semantic indicates the (x, y, z) coordinates of the
3505*61046927SAndroid Build Coastguard Workercurrent thread inside of the block.
3506*61046927SAndroid Build Coastguard Worker
3507*61046927SAndroid Build Coastguard Worker
3508*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SUBGROUP_SIZE
3509*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""""""
3510*61046927SAndroid Build Coastguard Worker
3511*61046927SAndroid Build Coastguard WorkerThis semantic indicates the subgroup size for the current invocation. This is
3512*61046927SAndroid Build Coastguard Workeran integer of at most 64, as it indicates the width of lanemasks. It does not
3513*61046927SAndroid Build Coastguard Workerdepend on the number of invocations that are active.
3514*61046927SAndroid Build Coastguard Worker
3515*61046927SAndroid Build Coastguard Worker
3516*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SUBGROUP_INVOCATION
3517*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""""""""""""
3518*61046927SAndroid Build Coastguard Worker
3519*61046927SAndroid Build Coastguard WorkerThe index of the current invocation within its subgroup.
3520*61046927SAndroid Build Coastguard Worker
3521*61046927SAndroid Build Coastguard Worker
3522*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SUBGROUP_EQ_MASK
3523*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""""
3524*61046927SAndroid Build Coastguard Worker
3525*61046927SAndroid Build Coastguard WorkerA bit mask of ``bit index == TGSI_SEMANTIC_SUBGROUP_INVOCATION``, i.e.
3526*61046927SAndroid Build Coastguard Worker``1 << subgroup_invocation`` in arbitrary precision arithmetic.
3527*61046927SAndroid Build Coastguard Worker
3528*61046927SAndroid Build Coastguard Worker
3529*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SUBGROUP_GE_MASK
3530*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""""
3531*61046927SAndroid Build Coastguard Worker
3532*61046927SAndroid Build Coastguard WorkerA bit mask of ``bit index >= TGSI_SEMANTIC_SUBGROUP_INVOCATION``, i.e.
3533*61046927SAndroid Build Coastguard Worker``((1 << (subgroup_size - subgroup_invocation)) - 1) << subgroup_invocation``
3534*61046927SAndroid Build Coastguard Workerin arbitrary precision arithmetic.
3535*61046927SAndroid Build Coastguard Worker
3536*61046927SAndroid Build Coastguard Worker
3537*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SUBGROUP_GT_MASK
3538*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""""
3539*61046927SAndroid Build Coastguard Worker
3540*61046927SAndroid Build Coastguard WorkerA bit mask of ``bit index > TGSI_SEMANTIC_SUBGROUP_INVOCATION``, i.e.
3541*61046927SAndroid Build Coastguard Worker``((1 << (subgroup_size - subgroup_invocation - 1)) - 1) << (subgroup_invocation + 1)``
3542*61046927SAndroid Build Coastguard Workerin arbitrary precision arithmetic.
3543*61046927SAndroid Build Coastguard Worker
3544*61046927SAndroid Build Coastguard Worker
3545*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SUBGROUP_LE_MASK
3546*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""""
3547*61046927SAndroid Build Coastguard Worker
3548*61046927SAndroid Build Coastguard WorkerA bit mask of ``bit index <= TGSI_SEMANTIC_SUBGROUP_INVOCATION``, i.e.
3549*61046927SAndroid Build Coastguard Worker``(1 << (subgroup_invocation + 1)) - 1`` in arbitrary precision arithmetic.
3550*61046927SAndroid Build Coastguard Worker
3551*61046927SAndroid Build Coastguard Worker
3552*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_SUBGROUP_LT_MASK
3553*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""""
3554*61046927SAndroid Build Coastguard Worker
3555*61046927SAndroid Build Coastguard WorkerA bit mask of ``bit index < TGSI_SEMANTIC_SUBGROUP_INVOCATION``, i.e.
3556*61046927SAndroid Build Coastguard Worker``(1 << subgroup_invocation) - 1`` in arbitrary precision arithmetic.
3557*61046927SAndroid Build Coastguard Worker
3558*61046927SAndroid Build Coastguard Worker
3559*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_VIEWPORT_MASK
3560*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""""""
3561*61046927SAndroid Build Coastguard Worker
3562*61046927SAndroid Build Coastguard WorkerA bit mask of viewports to broadcast the current primitive to. See
3563*61046927SAndroid Build Coastguard Worker:ext:`GL_NV_viewport_array2` for more details.
3564*61046927SAndroid Build Coastguard Worker
3565*61046927SAndroid Build Coastguard Worker
3566*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_TESS_DEFAULT_OUTER_LEVEL
3567*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""""""""""""
3568*61046927SAndroid Build Coastguard Worker
3569*61046927SAndroid Build Coastguard WorkerA system value equal to the default_outer_level array set via set_tess_level.
3570*61046927SAndroid Build Coastguard Worker
3571*61046927SAndroid Build Coastguard Worker
3572*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_TESS_DEFAULT_INNER_LEVEL
3573*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""""""""""""""
3574*61046927SAndroid Build Coastguard Worker
3575*61046927SAndroid Build Coastguard WorkerA system value equal to the default_inner_level array set via set_tess_level.
3576*61046927SAndroid Build Coastguard Worker
3577*61046927SAndroid Build Coastguard Worker
3578*61046927SAndroid Build Coastguard WorkerDeclaration Interpolate
3579*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^
3580*61046927SAndroid Build Coastguard Worker
3581*61046927SAndroid Build Coastguard WorkerThis token is only valid for fragment shader INPUT declarations.
3582*61046927SAndroid Build Coastguard Worker
3583*61046927SAndroid Build Coastguard WorkerThe Interpolate field specifies the way input is being interpolated by
3584*61046927SAndroid Build Coastguard Workerthe rasterizer and is one of TGSI_INTERPOLATE_*.
3585*61046927SAndroid Build Coastguard Worker
3586*61046927SAndroid Build Coastguard WorkerThe Location field specifies the location inside the pixel that the
3587*61046927SAndroid Build Coastguard Workerinterpolation should be done at, one of ``TGSI_INTERPOLATE_LOC_*``. Note that
3588*61046927SAndroid Build Coastguard Workerwhen per-sample shading is enabled, the implementation may choose to
3589*61046927SAndroid Build Coastguard Workerinterpolate at the sample irrespective of the Location field.
3590*61046927SAndroid Build Coastguard Worker
3591*61046927SAndroid Build Coastguard Worker
3592*61046927SAndroid Build Coastguard WorkerDeclaration Sampler View
3593*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^
3594*61046927SAndroid Build Coastguard Worker
3595*61046927SAndroid Build Coastguard WorkerFollows Declaration token if file is TGSI_FILE_SAMPLER_VIEW.
3596*61046927SAndroid Build Coastguard Worker
3597*61046927SAndroid Build Coastguard WorkerDCL SVIEW[#], resource, type(s)
3598*61046927SAndroid Build Coastguard Worker
3599*61046927SAndroid Build Coastguard WorkerDeclares a shader input sampler view and assigns it to a SVIEW[#]
3600*61046927SAndroid Build Coastguard Workerregister.
3601*61046927SAndroid Build Coastguard Worker
3602*61046927SAndroid Build Coastguard Workerresource can be one of BUFFER, 1D, 2D, 3D, 1D_ARRAY and 2D_ARRAY.
3603*61046927SAndroid Build Coastguard Worker
3604*61046927SAndroid Build Coastguard Workertype must be 1 or 4 entries (if specifying on a per-component
3605*61046927SAndroid Build Coastguard Workerlevel) out of UNORM, SNORM, SINT, UINT and FLOAT.
3606*61046927SAndroid Build Coastguard Worker
3607*61046927SAndroid Build Coastguard WorkerFor TEX\* style texture sample opcodes (as opposed to SAMPLE\* opcodes
3608*61046927SAndroid Build Coastguard Workerwhich take an explicit SVIEW[#] source register), there may be optionally
3609*61046927SAndroid Build Coastguard WorkerSVIEW[#] declarations.  In this case, the SVIEW index is implied by the
3610*61046927SAndroid Build Coastguard WorkerSAMP index, and there must be a corresponding SVIEW[#] declaration for
3611*61046927SAndroid Build Coastguard Workereach SAMP[#] declaration.  Drivers are free to ignore this if they wish.
3612*61046927SAndroid Build Coastguard WorkerBut note in particular that some drivers need to know the sampler type
3613*61046927SAndroid Build Coastguard Worker(float/int/unsigned) in order to generate the correct code, so cases
3614*61046927SAndroid Build Coastguard Workerwhere integer textures are sampled, SVIEW[#] declarations should be
3615*61046927SAndroid Build Coastguard Workerused.
3616*61046927SAndroid Build Coastguard Worker
3617*61046927SAndroid Build Coastguard WorkerNOTE: It is NOT legal to mix SAMPLE\* style opcodes and TEX\* opcodes
3618*61046927SAndroid Build Coastguard Workerin the same shader.
3619*61046927SAndroid Build Coastguard Worker
3620*61046927SAndroid Build Coastguard WorkerDeclaration Resource
3621*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^
3622*61046927SAndroid Build Coastguard Worker
3623*61046927SAndroid Build Coastguard WorkerFollows Declaration token if file is TGSI_FILE_RESOURCE.
3624*61046927SAndroid Build Coastguard Worker
3625*61046927SAndroid Build Coastguard WorkerDCL RES[#], resource [, WR] [, RAW]
3626*61046927SAndroid Build Coastguard Worker
3627*61046927SAndroid Build Coastguard WorkerDeclares a shader input resource and assigns it to a RES[#]
3628*61046927SAndroid Build Coastguard Workerregister.
3629*61046927SAndroid Build Coastguard Worker
3630*61046927SAndroid Build Coastguard Workerresource can be one of BUFFER, 1D, 2D, 3D, CUBE, 1D_ARRAY and
3631*61046927SAndroid Build Coastguard Worker2D_ARRAY.
3632*61046927SAndroid Build Coastguard Worker
3633*61046927SAndroid Build Coastguard WorkerIf the RAW keyword is not specified, the texture data will be
3634*61046927SAndroid Build Coastguard Workersubject to conversion, swizzling and scaling as required to yield
3635*61046927SAndroid Build Coastguard Workerthe specified data type from the physical data format of the bound
3636*61046927SAndroid Build Coastguard Workerresource.
3637*61046927SAndroid Build Coastguard Worker
3638*61046927SAndroid Build Coastguard WorkerIf the RAW keyword is specified, no channel conversion will be
3639*61046927SAndroid Build Coastguard Workerperformed: the values read for each of the channels (X,Y,Z,W) will
3640*61046927SAndroid Build Coastguard Workercorrespond to consecutive words in the same order and format
3641*61046927SAndroid Build Coastguard Workerthey're found in memory.  No element-to-address conversion will be
3642*61046927SAndroid Build Coastguard Workerperformed either: the value of the provided X coordinate will be
3643*61046927SAndroid Build Coastguard Workerinterpreted in byte units instead of texel units.  The result of
3644*61046927SAndroid Build Coastguard Workeraccessing a misaligned address is undefined.
3645*61046927SAndroid Build Coastguard Worker
3646*61046927SAndroid Build Coastguard WorkerUsage of the STORE opcode is only allowed if the WR (writable) flag
3647*61046927SAndroid Build Coastguard Workeris set.
3648*61046927SAndroid Build Coastguard Worker
3649*61046927SAndroid Build Coastguard WorkerHardware Atomic Register File
3650*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3651*61046927SAndroid Build Coastguard Worker
3652*61046927SAndroid Build Coastguard WorkerHardware atomics are declared as a 2D array with an optional array id.
3653*61046927SAndroid Build Coastguard Worker
3654*61046927SAndroid Build Coastguard WorkerThe first member of the dimension is the buffer resource the atomic
3655*61046927SAndroid Build Coastguard Workeris located in.
3656*61046927SAndroid Build Coastguard WorkerThe second member is a range into the buffer resource, either for
3657*61046927SAndroid Build Coastguard Workerone or multiple counters. If this is an array, the declaration will have
3658*61046927SAndroid Build Coastguard Workeran unique array id.
3659*61046927SAndroid Build Coastguard Worker
3660*61046927SAndroid Build Coastguard WorkerEach counter is 4 bytes in size, and index and ranges are in counters not bytes.
3661*61046927SAndroid Build Coastguard WorkerDCL HWATOMIC[0][0]
3662*61046927SAndroid Build Coastguard WorkerDCL HWATOMIC[0][1]
3663*61046927SAndroid Build Coastguard Worker
3664*61046927SAndroid Build Coastguard WorkerThis declares two atomics, one at the start of the buffer and one in the
3665*61046927SAndroid Build Coastguard Workersecond 4 bytes.
3666*61046927SAndroid Build Coastguard Worker
3667*61046927SAndroid Build Coastguard WorkerDCL HWATOMIC[0][0]
3668*61046927SAndroid Build Coastguard WorkerDCL HWATOMIC[1][0]
3669*61046927SAndroid Build Coastguard WorkerDCL HWATOMIC[1][1..3], ARRAY(1)
3670*61046927SAndroid Build Coastguard Worker
3671*61046927SAndroid Build Coastguard WorkerThis declares 5 atomics, one in buffer 0 at 0,
3672*61046927SAndroid Build Coastguard Workerone in buffer 1 at 0, and an array of 3 atomics in
3673*61046927SAndroid Build Coastguard Workerthe buffer 1, starting at 1.
3674*61046927SAndroid Build Coastguard Worker
3675*61046927SAndroid Build Coastguard WorkerProperties
3676*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^
3677*61046927SAndroid Build Coastguard Worker
3678*61046927SAndroid Build Coastguard WorkerProperties are general directives that apply to the whole TGSI program.
3679*61046927SAndroid Build Coastguard Worker
3680*61046927SAndroid Build Coastguard WorkerFS_COORD_ORIGIN
3681*61046927SAndroid Build Coastguard Worker"""""""""""""""
3682*61046927SAndroid Build Coastguard Worker
3683*61046927SAndroid Build Coastguard WorkerSpecifies the fragment shader TGSI_SEMANTIC_POSITION coordinate origin.
3684*61046927SAndroid Build Coastguard WorkerThe default value is UPPER_LEFT.
3685*61046927SAndroid Build Coastguard Worker
3686*61046927SAndroid Build Coastguard WorkerIf UPPER_LEFT, the position will be (0,0) at the upper left corner and
3687*61046927SAndroid Build Coastguard Workerincrease downward and rightward.
3688*61046927SAndroid Build Coastguard WorkerIf LOWER_LEFT, the position will be (0,0) at the lower left corner and
3689*61046927SAndroid Build Coastguard Workerincrease upward and rightward.
3690*61046927SAndroid Build Coastguard Worker
3691*61046927SAndroid Build Coastguard WorkerOpenGL defaults to LOWER_LEFT, and is configurable with the
3692*61046927SAndroid Build Coastguard Worker:ext:`GL_ARB_fragment_coord_conventions` extension.
3693*61046927SAndroid Build Coastguard Worker
3694*61046927SAndroid Build Coastguard WorkerDirectX 9/10 use UPPER_LEFT.
3695*61046927SAndroid Build Coastguard Worker
3696*61046927SAndroid Build Coastguard WorkerFS_COORD_PIXEL_CENTER
3697*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""
3698*61046927SAndroid Build Coastguard Worker
3699*61046927SAndroid Build Coastguard WorkerSpecifies the fragment shader TGSI_SEMANTIC_POSITION pixel center convention.
3700*61046927SAndroid Build Coastguard WorkerThe default value is HALF_INTEGER.
3701*61046927SAndroid Build Coastguard Worker
3702*61046927SAndroid Build Coastguard WorkerIf HALF_INTEGER, the fractional part of the position will be 0.5
3703*61046927SAndroid Build Coastguard WorkerIf INTEGER, the fractional part of the position will be 0.0
3704*61046927SAndroid Build Coastguard Worker
3705*61046927SAndroid Build Coastguard WorkerNote that this does not affect the set of fragments generated by
3706*61046927SAndroid Build Coastguard Workerrasterization, which is instead controlled by half_pixel_center in the
3707*61046927SAndroid Build Coastguard Workerrasterizer.
3708*61046927SAndroid Build Coastguard Worker
3709*61046927SAndroid Build Coastguard WorkerOpenGL defaults to HALF_INTEGER, and is configurable with the
3710*61046927SAndroid Build Coastguard Worker:ext:`GL_ARB_fragment_coord_conventions` extension.
3711*61046927SAndroid Build Coastguard Worker
3712*61046927SAndroid Build Coastguard WorkerDirectX 9 uses INTEGER.
3713*61046927SAndroid Build Coastguard WorkerDirectX 10 uses HALF_INTEGER.
3714*61046927SAndroid Build Coastguard Worker
3715*61046927SAndroid Build Coastguard WorkerFS_COLOR0_WRITES_ALL_CBUFS
3716*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""
3717*61046927SAndroid Build Coastguard WorkerSpecifies that writes to the fragment shader color 0 are replicated to all
3718*61046927SAndroid Build Coastguard Workerbound cbufs. This facilitates OpenGL's fragColor output vs fragData[0] where
3719*61046927SAndroid Build Coastguard WorkerfragData is directed to a single color buffer, but fragColor is broadcast.
3720*61046927SAndroid Build Coastguard Worker
3721*61046927SAndroid Build Coastguard WorkerVS_PROHIBIT_UCPS
3722*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""
3723*61046927SAndroid Build Coastguard WorkerIf this property is set on the program bound to the shader stage before the
3724*61046927SAndroid Build Coastguard Workerfragment shader, user clip planes should have no effect (be disabled) even if
3725*61046927SAndroid Build Coastguard Workerthat shader does not write to any clip distance outputs and the rasterizer's
3726*61046927SAndroid Build Coastguard Workerclip_plane_enable is non-zero.
3727*61046927SAndroid Build Coastguard WorkerThis property is only supported by drivers that also support shader clip
3728*61046927SAndroid Build Coastguard Workerdistance outputs.
3729*61046927SAndroid Build Coastguard WorkerThis is useful for APIs that don't have UCPs and where clip distances written
3730*61046927SAndroid Build Coastguard Workerby a shader cannot be disabled.
3731*61046927SAndroid Build Coastguard Worker
3732*61046927SAndroid Build Coastguard WorkerGS_INVOCATIONS
3733*61046927SAndroid Build Coastguard Worker""""""""""""""
3734*61046927SAndroid Build Coastguard Worker
3735*61046927SAndroid Build Coastguard WorkerSpecifies the number of times a geometry shader should be executed for each
3736*61046927SAndroid Build Coastguard Workerinput primitive. Each invocation will have a different
3737*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_INVOCATIONID system value set. If not specified, assumed to
3738*61046927SAndroid Build Coastguard Workerbe 1.
3739*61046927SAndroid Build Coastguard Worker
3740*61046927SAndroid Build Coastguard WorkerVS_WINDOW_SPACE_POSITION
3741*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""""""
3742*61046927SAndroid Build Coastguard WorkerIf this property is set on the vertex shader, the TGSI_SEMANTIC_POSITION output
3743*61046927SAndroid Build Coastguard Workeris assumed to contain window space coordinates.
3744*61046927SAndroid Build Coastguard WorkerDivision of X,Y,Z by W and the viewport transformation are disabled, and 1/W is
3745*61046927SAndroid Build Coastguard Workerdirectly taken from the 4-th component of the shader output.
3746*61046927SAndroid Build Coastguard WorkerNaturally, clipping is not performed on window coordinates either.
3747*61046927SAndroid Build Coastguard WorkerThe effect of this property is undefined if a geometry or tessellation shader
3748*61046927SAndroid Build Coastguard Workerare in use.
3749*61046927SAndroid Build Coastguard Worker
3750*61046927SAndroid Build Coastguard WorkerTCS_VERTICES_OUT
3751*61046927SAndroid Build Coastguard Worker""""""""""""""""
3752*61046927SAndroid Build Coastguard Worker
3753*61046927SAndroid Build Coastguard WorkerThe number of vertices written by the tessellation control shader. This
3754*61046927SAndroid Build Coastguard Workereffectively defines the patch input size of the tessellation evaluation shader
3755*61046927SAndroid Build Coastguard Workeras well.
3756*61046927SAndroid Build Coastguard Worker
3757*61046927SAndroid Build Coastguard WorkerTES_PRIM_MODE
3758*61046927SAndroid Build Coastguard Worker"""""""""""""
3759*61046927SAndroid Build Coastguard Worker
3760*61046927SAndroid Build Coastguard WorkerThis sets the tessellation primitive mode, one of ``MESA_PRIM_TRIANGLES``,
3761*61046927SAndroid Build Coastguard Worker``MESA_PRIM_QUADS``, or ``MESA_PRIM_LINES``. (Unlike in GL, there is no
3762*61046927SAndroid Build Coastguard Workerseparate isolines settings, the regular lines is assumed to mean isolines.)
3763*61046927SAndroid Build Coastguard Worker
3764*61046927SAndroid Build Coastguard WorkerTES_SPACING
3765*61046927SAndroid Build Coastguard Worker"""""""""""
3766*61046927SAndroid Build Coastguard Worker
3767*61046927SAndroid Build Coastguard WorkerThis sets the spacing mode of the tessellation generator, one of
3768*61046927SAndroid Build Coastguard Worker``PIPE_TESS_SPACING_*``.
3769*61046927SAndroid Build Coastguard Worker
3770*61046927SAndroid Build Coastguard WorkerTES_VERTEX_ORDER_CW
3771*61046927SAndroid Build Coastguard Worker"""""""""""""""""""
3772*61046927SAndroid Build Coastguard Worker
3773*61046927SAndroid Build Coastguard WorkerThis sets the vertex order to be clockwise if the value is 1, or
3774*61046927SAndroid Build Coastguard Workercounter-clockwise if set to 0.
3775*61046927SAndroid Build Coastguard Worker
3776*61046927SAndroid Build Coastguard WorkerTES_POINT_MODE
3777*61046927SAndroid Build Coastguard Worker""""""""""""""
3778*61046927SAndroid Build Coastguard Worker
3779*61046927SAndroid Build Coastguard WorkerIf set to a non-zero value, this turns on point mode for the tessellator,
3780*61046927SAndroid Build Coastguard Workerwhich means that points will be generated instead of primitives.
3781*61046927SAndroid Build Coastguard Worker
3782*61046927SAndroid Build Coastguard WorkerNUM_CLIPDIST_ENABLED
3783*61046927SAndroid Build Coastguard Worker""""""""""""""""""""
3784*61046927SAndroid Build Coastguard Worker
3785*61046927SAndroid Build Coastguard WorkerHow many clip distance scalar outputs are enabled.
3786*61046927SAndroid Build Coastguard Worker
3787*61046927SAndroid Build Coastguard WorkerNUM_CULLDIST_ENABLED
3788*61046927SAndroid Build Coastguard Worker""""""""""""""""""""
3789*61046927SAndroid Build Coastguard Worker
3790*61046927SAndroid Build Coastguard WorkerHow many cull distance scalar outputs are enabled.
3791*61046927SAndroid Build Coastguard Worker
3792*61046927SAndroid Build Coastguard WorkerFS_EARLY_DEPTH_STENCIL
3793*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3794*61046927SAndroid Build Coastguard Worker
3795*61046927SAndroid Build Coastguard WorkerWhether depth test, stencil test, and occlusion query should run before
3796*61046927SAndroid Build Coastguard Workerthe fragment shader (regardless of fragment shader side effects). Corresponds
3797*61046927SAndroid Build Coastguard Workerto GLSL early_fragment_tests.
3798*61046927SAndroid Build Coastguard Worker
3799*61046927SAndroid Build Coastguard WorkerNEXT_SHADER
3800*61046927SAndroid Build Coastguard Worker"""""""""""
3801*61046927SAndroid Build Coastguard Worker
3802*61046927SAndroid Build Coastguard WorkerWhich shader stage will MOST LIKELY follow after this shader when the shader
3803*61046927SAndroid Build Coastguard Workeris bound. This is only a hint to the driver and doesn't have to be precise.
3804*61046927SAndroid Build Coastguard WorkerOnly set for VS and TES.
3805*61046927SAndroid Build Coastguard Worker
3806*61046927SAndroid Build Coastguard WorkerCS_FIXED_BLOCK_WIDTH / HEIGHT / DEPTH
3807*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""""""""""""""""
3808*61046927SAndroid Build Coastguard Worker
3809*61046927SAndroid Build Coastguard WorkerThreads per block in each dimension, if known at compile time. If the block size
3810*61046927SAndroid Build Coastguard Workeris known all three should be at least 1. If it is unknown they should all be set
3811*61046927SAndroid Build Coastguard Workerto 0 or not set.
3812*61046927SAndroid Build Coastguard Worker
3813*61046927SAndroid Build Coastguard WorkerLEGACY_MATH_RULES
3814*61046927SAndroid Build Coastguard Worker"""""""""""""""""
3815*61046927SAndroid Build Coastguard Worker
3816*61046927SAndroid Build Coastguard WorkerThe MUL TGSI operation (FP32 multiplication) will return 0 if either
3817*61046927SAndroid Build Coastguard Workerof the operands are equal to 0. That means that 0 * Inf = 0. This
3818*61046927SAndroid Build Coastguard Workershould be set the same way for an entire pipeline. Note that this
3819*61046927SAndroid Build Coastguard Workerapplies not only to the literal MUL TGSI opcode, but all FP32
3820*61046927SAndroid Build Coastguard Workermultiplications implied by other operations, such as MAD, FMA, DP2,
3821*61046927SAndroid Build Coastguard WorkerDP3, DP4, DST, LOG, LRP, and possibly others. If there is a
3822*61046927SAndroid Build Coastguard Workermismatch between shaders, then it is unspecified whether this behavior
3823*61046927SAndroid Build Coastguard Workerwill be enabled.
3824*61046927SAndroid Build Coastguard Worker
3825*61046927SAndroid Build Coastguard WorkerFS_POST_DEPTH_COVERAGE
3826*61046927SAndroid Build Coastguard Worker""""""""""""""""""""""
3827*61046927SAndroid Build Coastguard Worker
3828*61046927SAndroid Build Coastguard WorkerWhen enabled, the input for TGSI_SEMANTIC_SAMPLEMASK will exclude samples
3829*61046927SAndroid Build Coastguard Workerthat have failed the depth/stencil tests. This is only valid when
3830*61046927SAndroid Build Coastguard WorkerFS_EARLY_DEPTH_STENCIL is also specified.
3831*61046927SAndroid Build Coastguard Worker
3832*61046927SAndroid Build Coastguard WorkerLAYER_VIEWPORT_RELATIVE
3833*61046927SAndroid Build Coastguard Worker"""""""""""""""""""""""
3834*61046927SAndroid Build Coastguard Worker
3835*61046927SAndroid Build Coastguard WorkerWhen enabled, the TGSI_SEMATNIC_LAYER output value is relative to the
3836*61046927SAndroid Build Coastguard Workercurrent viewport. This is especially useful in conjunction with
3837*61046927SAndroid Build Coastguard WorkerTGSI_SEMANTIC_VIEWPORT_MASK.
3838*61046927SAndroid Build Coastguard Worker
3839*61046927SAndroid Build Coastguard Worker
3840*61046927SAndroid Build Coastguard WorkerTexture Sampling and Texture Formats
3841*61046927SAndroid Build Coastguard Worker------------------------------------
3842*61046927SAndroid Build Coastguard Worker
3843*61046927SAndroid Build Coastguard WorkerThis table shows how texture image components are returned as (x,y,z,w) tuples
3844*61046927SAndroid Build Coastguard Workerby TGSI texture instructions, such as :opcode:`TEX`, :opcode:`TXD`, and
3845*61046927SAndroid Build Coastguard Worker:opcode:`TXP`. For reference, OpenGL and Direct3D conventions are shown as
3846*61046927SAndroid Build Coastguard Workerwell.
3847*61046927SAndroid Build Coastguard Worker
3848*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3849*61046927SAndroid Build Coastguard Worker| Texture Components | Gallium      | OpenGL             | Direct3D 9   |
3850*61046927SAndroid Build Coastguard Worker+====================+==============+====================+==============+
3851*61046927SAndroid Build Coastguard Worker| R                  | (r, 0, 0, 1) | (r, 0, 0, 1)       | (r, 1, 1, 1) |
3852*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3853*61046927SAndroid Build Coastguard Worker| RG                 | (r, g, 0, 1) | (r, g, 0, 1)       | (r, g, 1, 1) |
3854*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3855*61046927SAndroid Build Coastguard Worker| RGB                | (r, g, b, 1) | (r, g, b, 1)       | (r, g, b, 1) |
3856*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3857*61046927SAndroid Build Coastguard Worker| RGBA               | (r, g, b, a) | (r, g, b, a)       | (r, g, b, a) |
3858*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3859*61046927SAndroid Build Coastguard Worker| A                  | (0, 0, 0, a) | (0, 0, 0, a)       | (0, 0, 0, a) |
3860*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3861*61046927SAndroid Build Coastguard Worker| L                  | (l, l, l, 1) | (l, l, l, 1)       | (l, l, l, 1) |
3862*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3863*61046927SAndroid Build Coastguard Worker| LA                 | (l, l, l, a) | (l, l, l, a)       | (l, l, l, a) |
3864*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3865*61046927SAndroid Build Coastguard Worker| I                  | (i, i, i, i) | (i, i, i, i)       | N/A          |
3866*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3867*61046927SAndroid Build Coastguard Worker| UV                 | XXX TBD      | (0, 0, 0, 1)       | (u, v, 1, 1) |
3868*61046927SAndroid Build Coastguard Worker|                    |              | [#envmap-bumpmap]_ |              |
3869*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3870*61046927SAndroid Build Coastguard Worker| Z                  | (z, z, z, z) | (z, z, z, 1)       | (0, z, 0, 1) |
3871*61046927SAndroid Build Coastguard Worker|                    |              | [#depth-tex-mode]_ |              |
3872*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3873*61046927SAndroid Build Coastguard Worker| S                  | (s, s, s, s) | unknown            | unknown      |
3874*61046927SAndroid Build Coastguard Worker+--------------------+--------------+--------------------+--------------+
3875*61046927SAndroid Build Coastguard Worker
3876*61046927SAndroid Build Coastguard Worker.. [#envmap-bumpmap] https://registry.khronos.org/OpenGL/extensions/ATI/ATI_envmap_bumpmap.txt
3877*61046927SAndroid Build Coastguard Worker.. [#depth-tex-mode] the default is (z, z, z, 1) but may also be (0, 0, 0, z)
3878*61046927SAndroid Build Coastguard Worker   or (z, z, z, z) depending on the value of GL_DEPTH_TEXTURE_MODE.
3879