blob: bf20c633802d52eb074f57796a32a60c35056d35 [file] [log] [blame]
Austin Engcc2516a2023-10-17 20:57:54 +00001// Copyright 2023 The Dawn & Tint Authors
Ben Claytond9766dc2023-09-21 12:41:20 +00002//
Austin Engcc2516a2023-10-17 20:57:54 +00003// Redistribution and use in source and binary forms, with or without
4// modification, are permitted provided that the following conditions are met:
Ben Claytond9766dc2023-09-21 12:41:20 +00005//
Austin Engcc2516a2023-10-17 20:57:54 +00006// 1. Redistributions of source code must retain the above copyright notice, this
7// list of conditions and the following disclaimer.
Ben Claytond9766dc2023-09-21 12:41:20 +00008//
Austin Engcc2516a2023-10-17 20:57:54 +00009// 2. Redistributions in binary form must reproduce the above copyright notice,
10// this list of conditions and the following disclaimer in the documentation
11// and/or other materials provided with the distribution.
12//
13// 3. Neither the name of the copyright holder nor the names of its
14// contributors may be used to endorse or promote products derived from
15// this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
21// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Ben Claytond9766dc2023-09-21 12:41:20 +000027
28////////////////////////////////////////////////////////////////////////////////
29// File generated by 'tools/src/cmd/gen' using the template:
30// src/tint/lang/core/builtin_fn.cc.tmpl
31//
32// To regenerate run: './tools/run gen'
33//
34// Do not modify this file directly
35////////////////////////////////////////////////////////////////////////////////
36
37#include "src/tint/lang/core/builtin_fn.h"
38
39namespace tint::core {
40
41BuiltinFn ParseBuiltinFn(std::string_view name) {
42 if (name == "abs") {
43 return BuiltinFn::kAbs;
44 }
45 if (name == "acos") {
46 return BuiltinFn::kAcos;
47 }
48 if (name == "acosh") {
49 return BuiltinFn::kAcosh;
50 }
51 if (name == "all") {
52 return BuiltinFn::kAll;
53 }
54 if (name == "any") {
55 return BuiltinFn::kAny;
56 }
57 if (name == "arrayLength") {
58 return BuiltinFn::kArrayLength;
59 }
60 if (name == "asin") {
61 return BuiltinFn::kAsin;
62 }
63 if (name == "asinh") {
64 return BuiltinFn::kAsinh;
65 }
66 if (name == "atan") {
67 return BuiltinFn::kAtan;
68 }
69 if (name == "atan2") {
70 return BuiltinFn::kAtan2;
71 }
72 if (name == "atanh") {
73 return BuiltinFn::kAtanh;
74 }
75 if (name == "ceil") {
76 return BuiltinFn::kCeil;
77 }
78 if (name == "clamp") {
79 return BuiltinFn::kClamp;
80 }
81 if (name == "cos") {
82 return BuiltinFn::kCos;
83 }
84 if (name == "cosh") {
85 return BuiltinFn::kCosh;
86 }
87 if (name == "countLeadingZeros") {
88 return BuiltinFn::kCountLeadingZeros;
89 }
90 if (name == "countOneBits") {
91 return BuiltinFn::kCountOneBits;
92 }
93 if (name == "countTrailingZeros") {
94 return BuiltinFn::kCountTrailingZeros;
95 }
96 if (name == "cross") {
97 return BuiltinFn::kCross;
98 }
99 if (name == "degrees") {
100 return BuiltinFn::kDegrees;
101 }
102 if (name == "determinant") {
103 return BuiltinFn::kDeterminant;
104 }
105 if (name == "distance") {
106 return BuiltinFn::kDistance;
107 }
108 if (name == "dot") {
109 return BuiltinFn::kDot;
110 }
111 if (name == "dot4I8Packed") {
112 return BuiltinFn::kDot4I8Packed;
113 }
114 if (name == "dot4U8Packed") {
115 return BuiltinFn::kDot4U8Packed;
116 }
117 if (name == "dpdx") {
118 return BuiltinFn::kDpdx;
119 }
120 if (name == "dpdxCoarse") {
121 return BuiltinFn::kDpdxCoarse;
122 }
123 if (name == "dpdxFine") {
124 return BuiltinFn::kDpdxFine;
125 }
126 if (name == "dpdy") {
127 return BuiltinFn::kDpdy;
128 }
129 if (name == "dpdyCoarse") {
130 return BuiltinFn::kDpdyCoarse;
131 }
132 if (name == "dpdyFine") {
133 return BuiltinFn::kDpdyFine;
134 }
135 if (name == "exp") {
136 return BuiltinFn::kExp;
137 }
138 if (name == "exp2") {
139 return BuiltinFn::kExp2;
140 }
141 if (name == "extractBits") {
142 return BuiltinFn::kExtractBits;
143 }
144 if (name == "faceForward") {
145 return BuiltinFn::kFaceForward;
146 }
147 if (name == "firstLeadingBit") {
148 return BuiltinFn::kFirstLeadingBit;
149 }
150 if (name == "firstTrailingBit") {
151 return BuiltinFn::kFirstTrailingBit;
152 }
153 if (name == "floor") {
154 return BuiltinFn::kFloor;
155 }
156 if (name == "fma") {
157 return BuiltinFn::kFma;
158 }
159 if (name == "fract") {
160 return BuiltinFn::kFract;
161 }
162 if (name == "frexp") {
163 return BuiltinFn::kFrexp;
164 }
165 if (name == "fwidth") {
166 return BuiltinFn::kFwidth;
167 }
168 if (name == "fwidthCoarse") {
169 return BuiltinFn::kFwidthCoarse;
170 }
171 if (name == "fwidthFine") {
172 return BuiltinFn::kFwidthFine;
173 }
174 if (name == "insertBits") {
175 return BuiltinFn::kInsertBits;
176 }
177 if (name == "inverseSqrt") {
178 return BuiltinFn::kInverseSqrt;
179 }
180 if (name == "ldexp") {
181 return BuiltinFn::kLdexp;
182 }
183 if (name == "length") {
184 return BuiltinFn::kLength;
185 }
186 if (name == "log") {
187 return BuiltinFn::kLog;
188 }
189 if (name == "log2") {
190 return BuiltinFn::kLog2;
191 }
192 if (name == "max") {
193 return BuiltinFn::kMax;
194 }
195 if (name == "min") {
196 return BuiltinFn::kMin;
197 }
198 if (name == "mix") {
199 return BuiltinFn::kMix;
200 }
201 if (name == "modf") {
202 return BuiltinFn::kModf;
203 }
204 if (name == "normalize") {
205 return BuiltinFn::kNormalize;
206 }
207 if (name == "pack2x16float") {
208 return BuiltinFn::kPack2X16Float;
209 }
210 if (name == "pack2x16snorm") {
211 return BuiltinFn::kPack2X16Snorm;
212 }
213 if (name == "pack2x16unorm") {
214 return BuiltinFn::kPack2X16Unorm;
215 }
216 if (name == "pack4x8snorm") {
217 return BuiltinFn::kPack4X8Snorm;
218 }
219 if (name == "pack4x8unorm") {
220 return BuiltinFn::kPack4X8Unorm;
221 }
Jiawei Shaoc8ca47f2023-12-19 19:20:32 +0000222 if (name == "pack4xI8") {
223 return BuiltinFn::kPack4XI8;
224 }
225 if (name == "pack4xU8") {
226 return BuiltinFn::kPack4XU8;
227 }
Jiawei Shao0a408862024-01-05 03:14:11 +0000228 if (name == "pack4xI8Clamp") {
229 return BuiltinFn::kPack4XI8Clamp;
230 }
231 if (name == "pack4xU8Clamp") {
232 return BuiltinFn::kPack4XU8Clamp;
233 }
Ben Claytond9766dc2023-09-21 12:41:20 +0000234 if (name == "pow") {
235 return BuiltinFn::kPow;
236 }
237 if (name == "quantizeToF16") {
238 return BuiltinFn::kQuantizeToF16;
239 }
240 if (name == "radians") {
241 return BuiltinFn::kRadians;
242 }
243 if (name == "reflect") {
244 return BuiltinFn::kReflect;
245 }
246 if (name == "refract") {
247 return BuiltinFn::kRefract;
248 }
249 if (name == "reverseBits") {
250 return BuiltinFn::kReverseBits;
251 }
252 if (name == "round") {
253 return BuiltinFn::kRound;
254 }
255 if (name == "saturate") {
256 return BuiltinFn::kSaturate;
257 }
258 if (name == "select") {
259 return BuiltinFn::kSelect;
260 }
261 if (name == "sign") {
262 return BuiltinFn::kSign;
263 }
264 if (name == "sin") {
265 return BuiltinFn::kSin;
266 }
267 if (name == "sinh") {
268 return BuiltinFn::kSinh;
269 }
270 if (name == "smoothstep") {
271 return BuiltinFn::kSmoothstep;
272 }
273 if (name == "sqrt") {
274 return BuiltinFn::kSqrt;
275 }
276 if (name == "step") {
277 return BuiltinFn::kStep;
278 }
279 if (name == "storageBarrier") {
280 return BuiltinFn::kStorageBarrier;
281 }
282 if (name == "tan") {
283 return BuiltinFn::kTan;
284 }
285 if (name == "tanh") {
286 return BuiltinFn::kTanh;
287 }
288 if (name == "transpose") {
289 return BuiltinFn::kTranspose;
290 }
291 if (name == "trunc") {
292 return BuiltinFn::kTrunc;
293 }
294 if (name == "unpack2x16float") {
295 return BuiltinFn::kUnpack2X16Float;
296 }
297 if (name == "unpack2x16snorm") {
298 return BuiltinFn::kUnpack2X16Snorm;
299 }
300 if (name == "unpack2x16unorm") {
301 return BuiltinFn::kUnpack2X16Unorm;
302 }
303 if (name == "unpack4x8snorm") {
304 return BuiltinFn::kUnpack4X8Snorm;
305 }
306 if (name == "unpack4x8unorm") {
307 return BuiltinFn::kUnpack4X8Unorm;
308 }
Jiawei Shao0a408862024-01-05 03:14:11 +0000309 if (name == "unpack4xI8") {
310 return BuiltinFn::kUnpack4XI8;
311 }
312 if (name == "unpack4xU8") {
313 return BuiltinFn::kUnpack4XU8;
314 }
Ben Claytond9766dc2023-09-21 12:41:20 +0000315 if (name == "workgroupBarrier") {
316 return BuiltinFn::kWorkgroupBarrier;
317 }
Ben Claytond9766dc2023-09-21 12:41:20 +0000318 if (name == "textureBarrier") {
319 return BuiltinFn::kTextureBarrier;
320 }
321 if (name == "textureDimensions") {
322 return BuiltinFn::kTextureDimensions;
323 }
324 if (name == "textureGather") {
325 return BuiltinFn::kTextureGather;
326 }
327 if (name == "textureGatherCompare") {
328 return BuiltinFn::kTextureGatherCompare;
329 }
330 if (name == "textureNumLayers") {
331 return BuiltinFn::kTextureNumLayers;
332 }
333 if (name == "textureNumLevels") {
334 return BuiltinFn::kTextureNumLevels;
335 }
336 if (name == "textureNumSamples") {
337 return BuiltinFn::kTextureNumSamples;
338 }
339 if (name == "textureSample") {
340 return BuiltinFn::kTextureSample;
341 }
342 if (name == "textureSampleBias") {
343 return BuiltinFn::kTextureSampleBias;
344 }
345 if (name == "textureSampleCompare") {
346 return BuiltinFn::kTextureSampleCompare;
347 }
348 if (name == "textureSampleCompareLevel") {
349 return BuiltinFn::kTextureSampleCompareLevel;
350 }
351 if (name == "textureSampleGrad") {
352 return BuiltinFn::kTextureSampleGrad;
353 }
354 if (name == "textureSampleLevel") {
355 return BuiltinFn::kTextureSampleLevel;
356 }
357 if (name == "textureSampleBaseClampToEdge") {
358 return BuiltinFn::kTextureSampleBaseClampToEdge;
359 }
360 if (name == "textureStore") {
361 return BuiltinFn::kTextureStore;
362 }
363 if (name == "textureLoad") {
364 return BuiltinFn::kTextureLoad;
365 }
Le Hoang Quyenc2241312024-05-28 18:29:28 +0000366 if (name == "inputAttachmentLoad") {
367 return BuiltinFn::kInputAttachmentLoad;
368 }
Ben Claytond9766dc2023-09-21 12:41:20 +0000369 if (name == "atomicLoad") {
370 return BuiltinFn::kAtomicLoad;
371 }
372 if (name == "atomicStore") {
373 return BuiltinFn::kAtomicStore;
374 }
375 if (name == "atomicAdd") {
376 return BuiltinFn::kAtomicAdd;
377 }
378 if (name == "atomicSub") {
379 return BuiltinFn::kAtomicSub;
380 }
381 if (name == "atomicMax") {
382 return BuiltinFn::kAtomicMax;
383 }
384 if (name == "atomicMin") {
385 return BuiltinFn::kAtomicMin;
386 }
387 if (name == "atomicAnd") {
388 return BuiltinFn::kAtomicAnd;
389 }
390 if (name == "atomicOr") {
391 return BuiltinFn::kAtomicOr;
392 }
393 if (name == "atomicXor") {
394 return BuiltinFn::kAtomicXor;
395 }
396 if (name == "atomicExchange") {
397 return BuiltinFn::kAtomicExchange;
398 }
399 if (name == "atomicCompareExchangeWeak") {
400 return BuiltinFn::kAtomicCompareExchangeWeak;
401 }
402 if (name == "subgroupBallot") {
403 return BuiltinFn::kSubgroupBallot;
404 }
Natalie Chouinardf15cc072024-08-09 20:50:15 +0000405 if (name == "subgroupElect") {
406 return BuiltinFn::kSubgroupElect;
407 }
Ben Claytond9766dc2023-09-21 12:41:20 +0000408 if (name == "subgroupBroadcast") {
409 return BuiltinFn::kSubgroupBroadcast;
410 }
Natalie Chouinardf15cc072024-08-09 20:50:15 +0000411 if (name == "subgroupBroadcastFirst") {
412 return BuiltinFn::kSubgroupBroadcastFirst;
413 }
Natalie Chouinardb8622992024-08-12 15:44:48 +0000414 if (name == "subgroupShuffle") {
415 return BuiltinFn::kSubgroupShuffle;
416 }
Natalie Chouinarddbefda92024-08-13 19:10:21 +0000417 if (name == "subgroupShuffleXor") {
418 return BuiltinFn::kSubgroupShuffleXor;
419 }
420 if (name == "subgroupShuffleUp") {
421 return BuiltinFn::kSubgroupShuffleUp;
422 }
423 if (name == "subgroupShuffleDown") {
424 return BuiltinFn::kSubgroupShuffleDown;
425 }
Natalie Chouinardd0cf77e2024-08-06 17:41:20 +0000426 if (name == "subgroupAdd") {
427 return BuiltinFn::kSubgroupAdd;
428 }
Peter McNeeleyd35a3b62024-09-20 20:20:51 +0000429 if (name == "subgroupInclusiveAdd") {
430 return BuiltinFn::kSubgroupInclusiveAdd;
431 }
Natalie Chouinardd0cf77e2024-08-06 17:41:20 +0000432 if (name == "subgroupExclusiveAdd") {
433 return BuiltinFn::kSubgroupExclusiveAdd;
434 }
435 if (name == "subgroupMul") {
436 return BuiltinFn::kSubgroupMul;
437 }
Peter McNeeleyd35a3b62024-09-20 20:20:51 +0000438 if (name == "subgroupInclusiveMul") {
439 return BuiltinFn::kSubgroupInclusiveMul;
440 }
Natalie Chouinardd0cf77e2024-08-06 17:41:20 +0000441 if (name == "subgroupExclusiveMul") {
442 return BuiltinFn::kSubgroupExclusiveMul;
443 }
Natalie Chouinarde9e450e2024-08-08 23:16:40 +0000444 if (name == "subgroupAnd") {
445 return BuiltinFn::kSubgroupAnd;
446 }
447 if (name == "subgroupOr") {
448 return BuiltinFn::kSubgroupOr;
449 }
450 if (name == "subgroupXor") {
451 return BuiltinFn::kSubgroupXor;
452 }
Natalie Chouinard7be306a2024-08-09 00:48:25 +0000453 if (name == "subgroupMin") {
454 return BuiltinFn::kSubgroupMin;
455 }
456 if (name == "subgroupMax") {
457 return BuiltinFn::kSubgroupMax;
458 }
Natalie Chouinard95624692024-08-09 19:03:38 +0000459 if (name == "subgroupAll") {
460 return BuiltinFn::kSubgroupAll;
461 }
462 if (name == "subgroupAny") {
463 return BuiltinFn::kSubgroupAny;
464 }
Natalie Chouinardb7114a62024-08-14 16:10:59 +0000465 if (name == "quadBroadcast") {
466 return BuiltinFn::kQuadBroadcast;
467 }
Natalie Chouinarde31fa9d2024-08-14 20:52:07 +0000468 if (name == "quadSwapX") {
469 return BuiltinFn::kQuadSwapX;
470 }
471 if (name == "quadSwapY") {
472 return BuiltinFn::kQuadSwapY;
473 }
474 if (name == "quadSwapDiagonal") {
475 return BuiltinFn::kQuadSwapDiagonal;
476 }
Ben Claytond9766dc2023-09-21 12:41:20 +0000477 return BuiltinFn::kNone;
478}
479
480const char* str(BuiltinFn i) {
481 switch (i) {
482 case BuiltinFn::kNone:
483 return "<none>";
484 case BuiltinFn::kAbs:
485 return "abs";
486 case BuiltinFn::kAcos:
487 return "acos";
488 case BuiltinFn::kAcosh:
489 return "acosh";
490 case BuiltinFn::kAll:
491 return "all";
492 case BuiltinFn::kAny:
493 return "any";
494 case BuiltinFn::kArrayLength:
495 return "arrayLength";
496 case BuiltinFn::kAsin:
497 return "asin";
498 case BuiltinFn::kAsinh:
499 return "asinh";
500 case BuiltinFn::kAtan:
501 return "atan";
502 case BuiltinFn::kAtan2:
503 return "atan2";
504 case BuiltinFn::kAtanh:
505 return "atanh";
506 case BuiltinFn::kCeil:
507 return "ceil";
508 case BuiltinFn::kClamp:
509 return "clamp";
510 case BuiltinFn::kCos:
511 return "cos";
512 case BuiltinFn::kCosh:
513 return "cosh";
514 case BuiltinFn::kCountLeadingZeros:
515 return "countLeadingZeros";
516 case BuiltinFn::kCountOneBits:
517 return "countOneBits";
518 case BuiltinFn::kCountTrailingZeros:
519 return "countTrailingZeros";
520 case BuiltinFn::kCross:
521 return "cross";
522 case BuiltinFn::kDegrees:
523 return "degrees";
524 case BuiltinFn::kDeterminant:
525 return "determinant";
526 case BuiltinFn::kDistance:
527 return "distance";
528 case BuiltinFn::kDot:
529 return "dot";
530 case BuiltinFn::kDot4I8Packed:
531 return "dot4I8Packed";
532 case BuiltinFn::kDot4U8Packed:
533 return "dot4U8Packed";
534 case BuiltinFn::kDpdx:
535 return "dpdx";
536 case BuiltinFn::kDpdxCoarse:
537 return "dpdxCoarse";
538 case BuiltinFn::kDpdxFine:
539 return "dpdxFine";
540 case BuiltinFn::kDpdy:
541 return "dpdy";
542 case BuiltinFn::kDpdyCoarse:
543 return "dpdyCoarse";
544 case BuiltinFn::kDpdyFine:
545 return "dpdyFine";
546 case BuiltinFn::kExp:
547 return "exp";
548 case BuiltinFn::kExp2:
549 return "exp2";
550 case BuiltinFn::kExtractBits:
551 return "extractBits";
552 case BuiltinFn::kFaceForward:
553 return "faceForward";
554 case BuiltinFn::kFirstLeadingBit:
555 return "firstLeadingBit";
556 case BuiltinFn::kFirstTrailingBit:
557 return "firstTrailingBit";
558 case BuiltinFn::kFloor:
559 return "floor";
560 case BuiltinFn::kFma:
561 return "fma";
562 case BuiltinFn::kFract:
563 return "fract";
564 case BuiltinFn::kFrexp:
565 return "frexp";
566 case BuiltinFn::kFwidth:
567 return "fwidth";
568 case BuiltinFn::kFwidthCoarse:
569 return "fwidthCoarse";
570 case BuiltinFn::kFwidthFine:
571 return "fwidthFine";
572 case BuiltinFn::kInsertBits:
573 return "insertBits";
574 case BuiltinFn::kInverseSqrt:
575 return "inverseSqrt";
576 case BuiltinFn::kLdexp:
577 return "ldexp";
578 case BuiltinFn::kLength:
579 return "length";
580 case BuiltinFn::kLog:
581 return "log";
582 case BuiltinFn::kLog2:
583 return "log2";
584 case BuiltinFn::kMax:
585 return "max";
586 case BuiltinFn::kMin:
587 return "min";
588 case BuiltinFn::kMix:
589 return "mix";
590 case BuiltinFn::kModf:
591 return "modf";
592 case BuiltinFn::kNormalize:
593 return "normalize";
594 case BuiltinFn::kPack2X16Float:
595 return "pack2x16float";
596 case BuiltinFn::kPack2X16Snorm:
597 return "pack2x16snorm";
598 case BuiltinFn::kPack2X16Unorm:
599 return "pack2x16unorm";
600 case BuiltinFn::kPack4X8Snorm:
601 return "pack4x8snorm";
602 case BuiltinFn::kPack4X8Unorm:
603 return "pack4x8unorm";
Jiawei Shaoc8ca47f2023-12-19 19:20:32 +0000604 case BuiltinFn::kPack4XI8:
605 return "pack4xI8";
606 case BuiltinFn::kPack4XU8:
607 return "pack4xU8";
Jiawei Shao0a408862024-01-05 03:14:11 +0000608 case BuiltinFn::kPack4XI8Clamp:
609 return "pack4xI8Clamp";
610 case BuiltinFn::kPack4XU8Clamp:
611 return "pack4xU8Clamp";
Ben Claytond9766dc2023-09-21 12:41:20 +0000612 case BuiltinFn::kPow:
613 return "pow";
614 case BuiltinFn::kQuantizeToF16:
615 return "quantizeToF16";
616 case BuiltinFn::kRadians:
617 return "radians";
618 case BuiltinFn::kReflect:
619 return "reflect";
620 case BuiltinFn::kRefract:
621 return "refract";
622 case BuiltinFn::kReverseBits:
623 return "reverseBits";
624 case BuiltinFn::kRound:
625 return "round";
626 case BuiltinFn::kSaturate:
627 return "saturate";
628 case BuiltinFn::kSelect:
629 return "select";
630 case BuiltinFn::kSign:
631 return "sign";
632 case BuiltinFn::kSin:
633 return "sin";
634 case BuiltinFn::kSinh:
635 return "sinh";
636 case BuiltinFn::kSmoothstep:
637 return "smoothstep";
638 case BuiltinFn::kSqrt:
639 return "sqrt";
640 case BuiltinFn::kStep:
641 return "step";
642 case BuiltinFn::kStorageBarrier:
643 return "storageBarrier";
644 case BuiltinFn::kTan:
645 return "tan";
646 case BuiltinFn::kTanh:
647 return "tanh";
648 case BuiltinFn::kTranspose:
649 return "transpose";
650 case BuiltinFn::kTrunc:
651 return "trunc";
652 case BuiltinFn::kUnpack2X16Float:
653 return "unpack2x16float";
654 case BuiltinFn::kUnpack2X16Snorm:
655 return "unpack2x16snorm";
656 case BuiltinFn::kUnpack2X16Unorm:
657 return "unpack2x16unorm";
658 case BuiltinFn::kUnpack4X8Snorm:
659 return "unpack4x8snorm";
660 case BuiltinFn::kUnpack4X8Unorm:
661 return "unpack4x8unorm";
Jiawei Shao0a408862024-01-05 03:14:11 +0000662 case BuiltinFn::kUnpack4XI8:
663 return "unpack4xI8";
664 case BuiltinFn::kUnpack4XU8:
665 return "unpack4xU8";
Ben Claytond9766dc2023-09-21 12:41:20 +0000666 case BuiltinFn::kWorkgroupBarrier:
667 return "workgroupBarrier";
Ben Claytond9766dc2023-09-21 12:41:20 +0000668 case BuiltinFn::kTextureBarrier:
669 return "textureBarrier";
670 case BuiltinFn::kTextureDimensions:
671 return "textureDimensions";
672 case BuiltinFn::kTextureGather:
673 return "textureGather";
674 case BuiltinFn::kTextureGatherCompare:
675 return "textureGatherCompare";
676 case BuiltinFn::kTextureNumLayers:
677 return "textureNumLayers";
678 case BuiltinFn::kTextureNumLevels:
679 return "textureNumLevels";
680 case BuiltinFn::kTextureNumSamples:
681 return "textureNumSamples";
682 case BuiltinFn::kTextureSample:
683 return "textureSample";
684 case BuiltinFn::kTextureSampleBias:
685 return "textureSampleBias";
686 case BuiltinFn::kTextureSampleCompare:
687 return "textureSampleCompare";
688 case BuiltinFn::kTextureSampleCompareLevel:
689 return "textureSampleCompareLevel";
690 case BuiltinFn::kTextureSampleGrad:
691 return "textureSampleGrad";
692 case BuiltinFn::kTextureSampleLevel:
693 return "textureSampleLevel";
694 case BuiltinFn::kTextureSampleBaseClampToEdge:
695 return "textureSampleBaseClampToEdge";
696 case BuiltinFn::kTextureStore:
697 return "textureStore";
698 case BuiltinFn::kTextureLoad:
699 return "textureLoad";
Le Hoang Quyenc2241312024-05-28 18:29:28 +0000700 case BuiltinFn::kInputAttachmentLoad:
701 return "inputAttachmentLoad";
Ben Claytond9766dc2023-09-21 12:41:20 +0000702 case BuiltinFn::kAtomicLoad:
703 return "atomicLoad";
704 case BuiltinFn::kAtomicStore:
705 return "atomicStore";
706 case BuiltinFn::kAtomicAdd:
707 return "atomicAdd";
708 case BuiltinFn::kAtomicSub:
709 return "atomicSub";
710 case BuiltinFn::kAtomicMax:
711 return "atomicMax";
712 case BuiltinFn::kAtomicMin:
713 return "atomicMin";
714 case BuiltinFn::kAtomicAnd:
715 return "atomicAnd";
716 case BuiltinFn::kAtomicOr:
717 return "atomicOr";
718 case BuiltinFn::kAtomicXor:
719 return "atomicXor";
720 case BuiltinFn::kAtomicExchange:
721 return "atomicExchange";
722 case BuiltinFn::kAtomicCompareExchangeWeak:
723 return "atomicCompareExchangeWeak";
724 case BuiltinFn::kSubgroupBallot:
725 return "subgroupBallot";
Natalie Chouinardf15cc072024-08-09 20:50:15 +0000726 case BuiltinFn::kSubgroupElect:
727 return "subgroupElect";
Ben Claytond9766dc2023-09-21 12:41:20 +0000728 case BuiltinFn::kSubgroupBroadcast:
729 return "subgroupBroadcast";
Natalie Chouinardf15cc072024-08-09 20:50:15 +0000730 case BuiltinFn::kSubgroupBroadcastFirst:
731 return "subgroupBroadcastFirst";
Natalie Chouinardb8622992024-08-12 15:44:48 +0000732 case BuiltinFn::kSubgroupShuffle:
733 return "subgroupShuffle";
Natalie Chouinarddbefda92024-08-13 19:10:21 +0000734 case BuiltinFn::kSubgroupShuffleXor:
735 return "subgroupShuffleXor";
736 case BuiltinFn::kSubgroupShuffleUp:
737 return "subgroupShuffleUp";
738 case BuiltinFn::kSubgroupShuffleDown:
739 return "subgroupShuffleDown";
Natalie Chouinardd0cf77e2024-08-06 17:41:20 +0000740 case BuiltinFn::kSubgroupAdd:
741 return "subgroupAdd";
Peter McNeeleyd35a3b62024-09-20 20:20:51 +0000742 case BuiltinFn::kSubgroupInclusiveAdd:
743 return "subgroupInclusiveAdd";
Natalie Chouinardd0cf77e2024-08-06 17:41:20 +0000744 case BuiltinFn::kSubgroupExclusiveAdd:
745 return "subgroupExclusiveAdd";
746 case BuiltinFn::kSubgroupMul:
747 return "subgroupMul";
Peter McNeeleyd35a3b62024-09-20 20:20:51 +0000748 case BuiltinFn::kSubgroupInclusiveMul:
749 return "subgroupInclusiveMul";
Natalie Chouinardd0cf77e2024-08-06 17:41:20 +0000750 case BuiltinFn::kSubgroupExclusiveMul:
751 return "subgroupExclusiveMul";
Natalie Chouinarde9e450e2024-08-08 23:16:40 +0000752 case BuiltinFn::kSubgroupAnd:
753 return "subgroupAnd";
754 case BuiltinFn::kSubgroupOr:
755 return "subgroupOr";
756 case BuiltinFn::kSubgroupXor:
757 return "subgroupXor";
Natalie Chouinard7be306a2024-08-09 00:48:25 +0000758 case BuiltinFn::kSubgroupMin:
759 return "subgroupMin";
760 case BuiltinFn::kSubgroupMax:
761 return "subgroupMax";
Natalie Chouinard95624692024-08-09 19:03:38 +0000762 case BuiltinFn::kSubgroupAll:
763 return "subgroupAll";
764 case BuiltinFn::kSubgroupAny:
765 return "subgroupAny";
Natalie Chouinardb7114a62024-08-14 16:10:59 +0000766 case BuiltinFn::kQuadBroadcast:
767 return "quadBroadcast";
Natalie Chouinarde31fa9d2024-08-14 20:52:07 +0000768 case BuiltinFn::kQuadSwapX:
769 return "quadSwapX";
770 case BuiltinFn::kQuadSwapY:
771 return "quadSwapY";
772 case BuiltinFn::kQuadSwapDiagonal:
773 return "quadSwapDiagonal";
Ben Claytond9766dc2023-09-21 12:41:20 +0000774 }
775 return "<unknown>";
776}
777
778bool IsCoarseDerivative(BuiltinFn f) {
779 return f == BuiltinFn::kDpdxCoarse || f == BuiltinFn::kDpdyCoarse ||
780 f == BuiltinFn::kFwidthCoarse;
781}
782
783bool IsFineDerivative(BuiltinFn f) {
784 return f == BuiltinFn::kDpdxFine || f == BuiltinFn::kDpdyFine || f == BuiltinFn::kFwidthFine;
785}
786
787bool IsDerivative(BuiltinFn f) {
788 return f == BuiltinFn::kDpdx || f == BuiltinFn::kDpdy || f == BuiltinFn::kFwidth ||
789 IsCoarseDerivative(f) || IsFineDerivative(f);
790}
791
792bool IsTexture(BuiltinFn f) {
793 return IsImageQuery(f) || //
794 f == BuiltinFn::kTextureGather || //
795 f == BuiltinFn::kTextureGatherCompare || //
796 f == BuiltinFn::kTextureLoad || //
797 f == BuiltinFn::kTextureSample || //
798 f == BuiltinFn::kTextureSampleBaseClampToEdge || //
799 f == BuiltinFn::kTextureSampleBias || //
800 f == BuiltinFn::kTextureSampleCompare || //
801 f == BuiltinFn::kTextureSampleCompareLevel || //
802 f == BuiltinFn::kTextureSampleGrad || //
803 f == BuiltinFn::kTextureSampleLevel || //
Le Hoang Quyend7dfc6c2024-05-29 00:12:52 +0000804 f == BuiltinFn::kTextureStore || f == BuiltinFn::kInputAttachmentLoad;
Ben Claytond9766dc2023-09-21 12:41:20 +0000805}
806
807bool IsImageQuery(BuiltinFn f) {
808 return f == BuiltinFn::kTextureDimensions || f == BuiltinFn::kTextureNumLayers ||
809 f == BuiltinFn::kTextureNumLevels || f == BuiltinFn::kTextureNumSamples;
810}
811
812bool IsDataPacking(BuiltinFn f) {
813 return f == BuiltinFn::kPack4X8Snorm || f == BuiltinFn::kPack4X8Unorm ||
814 f == BuiltinFn::kPack2X16Snorm || f == BuiltinFn::kPack2X16Unorm ||
815 f == BuiltinFn::kPack2X16Float;
816}
817
818bool IsDataUnpacking(BuiltinFn f) {
819 return f == BuiltinFn::kUnpack4X8Snorm || f == BuiltinFn::kUnpack4X8Unorm ||
820 f == BuiltinFn::kUnpack2X16Snorm || f == BuiltinFn::kUnpack2X16Unorm ||
821 f == BuiltinFn::kUnpack2X16Float;
822}
823
824bool IsBarrier(BuiltinFn f) {
825 return f == BuiltinFn::kWorkgroupBarrier || f == BuiltinFn::kStorageBarrier ||
826 f == BuiltinFn::kTextureBarrier;
827}
828
829bool IsAtomic(BuiltinFn f) {
830 return f == BuiltinFn::kAtomicLoad || f == BuiltinFn::kAtomicStore ||
831 f == BuiltinFn::kAtomicAdd || f == BuiltinFn::kAtomicSub || f == BuiltinFn::kAtomicMax ||
832 f == BuiltinFn::kAtomicMin || f == BuiltinFn::kAtomicAnd || f == BuiltinFn::kAtomicOr ||
833 f == BuiltinFn::kAtomicXor || f == BuiltinFn::kAtomicExchange ||
834 f == BuiltinFn::kAtomicCompareExchangeWeak;
835}
836
Jiawei Shao53c0fa92023-12-08 01:24:00 +0000837bool IsPacked4x8IntegerDotProductBuiltin(BuiltinFn f) {
Jiawei Shaoc8ca47f2023-12-19 19:20:32 +0000838 return f == BuiltinFn::kDot4I8Packed || f == BuiltinFn::kDot4U8Packed ||
Jiawei Shao0a408862024-01-05 03:14:11 +0000839 f == BuiltinFn::kPack4XI8 || f == BuiltinFn::kPack4XU8 ||
840 f == BuiltinFn::kPack4XI8Clamp || f == BuiltinFn::kPack4XU8Clamp ||
841 f == BuiltinFn::kUnpack4XI8 || f == BuiltinFn::kUnpack4XU8;
Ben Claytond9766dc2023-09-21 12:41:20 +0000842}
843
Ben Claytond9766dc2023-09-21 12:41:20 +0000844bool HasSideEffects(BuiltinFn f) {
845 switch (f) {
846 case BuiltinFn::kAtomicAdd:
847 case BuiltinFn::kAtomicAnd:
848 case BuiltinFn::kAtomicCompareExchangeWeak:
849 case BuiltinFn::kAtomicExchange:
850 case BuiltinFn::kAtomicMax:
851 case BuiltinFn::kAtomicMin:
852 case BuiltinFn::kAtomicOr:
853 case BuiltinFn::kAtomicStore:
854 case BuiltinFn::kAtomicSub:
855 case BuiltinFn::kAtomicXor:
856 case BuiltinFn::kTextureStore:
Ben Claytond9766dc2023-09-21 12:41:20 +0000857 return true;
858 default:
859 break;
860 }
861 return false;
862}
863
864} // namespace tint::core