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