summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h
diff options
context:
space:
mode:
authorGravatar bunnei2021-07-25 11:39:04 -0700
committerGravatar GitHub2021-07-25 11:39:04 -0700
commit98b26b6e126d4775fdf3f773fe8a8ac808a8ff8f (patch)
tree816faa96c2c4d291825063433331a8ea4b3d08f1 /src/shader_recompiler/backend/glsl/emit_glsl_instructions.h
parentMerge pull request #6699 from lat9nq/common-threads (diff)
parentshader: Support out of bound local memory reads and immediate writes (diff)
downloadyuzu-98b26b6e126d4775fdf3f773fe8a8ac808a8ff8f.tar.gz
yuzu-98b26b6e126d4775fdf3f773fe8a8ac808a8ff8f.tar.xz
yuzu-98b26b6e126d4775fdf3f773fe8a8ac808a8ff8f.zip
Merge pull request #6585 from ameerj/hades
Shader Decompiler Rewrite
Diffstat (limited to 'src/shader_recompiler/backend/glsl/emit_glsl_instructions.h')
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_instructions.h702
1 files changed, 702 insertions, 0 deletions
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h b/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h
new file mode 100644
index 000000000..5936d086f
--- /dev/null
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h
@@ -0,0 +1,702 @@
1// Copyright 2021 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <string_view>
8
9#include "common/common_types.h"
10
11namespace Shader::IR {
12enum class Attribute : u64;
13enum class Patch : u64;
14class Inst;
15class Value;
16} // namespace Shader::IR
17
18namespace Shader::Backend::GLSL {
19class EmitContext;
20
21#define NotImplemented() throw NotImplementedException("GLSL instruction {}", __func__)
22
23// Microinstruction emitters
24void EmitPhi(EmitContext& ctx, IR::Inst& inst);
25void EmitVoid(EmitContext& ctx);
26void EmitIdentity(EmitContext& ctx, IR::Inst& inst, const IR::Value& value);
27void EmitConditionRef(EmitContext& ctx, IR::Inst& inst, const IR::Value& value);
28void EmitReference(EmitContext& ctx, const IR::Value& value);
29void EmitPhiMove(EmitContext& ctx, const IR::Value& phi, const IR::Value& value);
30void EmitJoin(EmitContext& ctx);
31void EmitDemoteToHelperInvocation(EmitContext& ctx);
32void EmitBarrier(EmitContext& ctx);
33void EmitWorkgroupMemoryBarrier(EmitContext& ctx);
34void EmitDeviceMemoryBarrier(EmitContext& ctx);
35void EmitPrologue(EmitContext& ctx);
36void EmitEpilogue(EmitContext& ctx);
37void EmitEmitVertex(EmitContext& ctx, const IR::Value& stream);
38void EmitEndPrimitive(EmitContext& ctx, const IR::Value& stream);
39void EmitGetRegister(EmitContext& ctx);
40void EmitSetRegister(EmitContext& ctx);
41void EmitGetPred(EmitContext& ctx);
42void EmitSetPred(EmitContext& ctx);
43void EmitSetGotoVariable(EmitContext& ctx);
44void EmitGetGotoVariable(EmitContext& ctx);
45void EmitSetIndirectBranchVariable(EmitContext& ctx);
46void EmitGetIndirectBranchVariable(EmitContext& ctx);
47void EmitGetCbufU8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
48 const IR::Value& offset);
49void EmitGetCbufS8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
50 const IR::Value& offset);
51void EmitGetCbufU16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
52 const IR::Value& offset);
53void EmitGetCbufS16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
54 const IR::Value& offset);
55void EmitGetCbufU32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
56 const IR::Value& offset);
57void EmitGetCbufF32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
58 const IR::Value& offset);
59void EmitGetCbufU32x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
60 const IR::Value& offset);
61void EmitGetAttribute(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr,
62 std::string_view vertex);
63void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, std::string_view value,
64 std::string_view vertex);
65void EmitGetAttributeIndexed(EmitContext& ctx, IR::Inst& inst, std::string_view offset,
66 std::string_view vertex);
67void EmitSetAttributeIndexed(EmitContext& ctx, std::string_view offset, std::string_view value,
68 std::string_view vertex);
69void EmitGetPatch(EmitContext& ctx, IR::Inst& inst, IR::Patch patch);
70void EmitSetPatch(EmitContext& ctx, IR::Patch patch, std::string_view value);
71void EmitSetFragColor(EmitContext& ctx, u32 index, u32 component, std::string_view value);
72void EmitSetSampleMask(EmitContext& ctx, std::string_view value);
73void EmitSetFragDepth(EmitContext& ctx, std::string_view value);
74void EmitGetZFlag(EmitContext& ctx);
75void EmitGetSFlag(EmitContext& ctx);
76void EmitGetCFlag(EmitContext& ctx);
77void EmitGetOFlag(EmitContext& ctx);
78void EmitSetZFlag(EmitContext& ctx);
79void EmitSetSFlag(EmitContext& ctx);
80void EmitSetCFlag(EmitContext& ctx);
81void EmitSetOFlag(EmitContext& ctx);
82void EmitWorkgroupId(EmitContext& ctx, IR::Inst& inst);
83void EmitLocalInvocationId(EmitContext& ctx, IR::Inst& inst);
84void EmitInvocationId(EmitContext& ctx, IR::Inst& inst);
85void EmitSampleId(EmitContext& ctx, IR::Inst& inst);
86void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst);
87void EmitYDirection(EmitContext& ctx, IR::Inst& inst);
88void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, std::string_view word_offset);
89void EmitWriteLocal(EmitContext& ctx, std::string_view word_offset, std::string_view value);
90void EmitUndefU1(EmitContext& ctx, IR::Inst& inst);
91void EmitUndefU8(EmitContext& ctx, IR::Inst& inst);
92void EmitUndefU16(EmitContext& ctx, IR::Inst& inst);
93void EmitUndefU32(EmitContext& ctx, IR::Inst& inst);
94void EmitUndefU64(EmitContext& ctx, IR::Inst& inst);
95void EmitLoadGlobalU8(EmitContext& ctx);
96void EmitLoadGlobalS8(EmitContext& ctx);
97void EmitLoadGlobalU16(EmitContext& ctx);
98void EmitLoadGlobalS16(EmitContext& ctx);
99void EmitLoadGlobal32(EmitContext& ctx, IR::Inst& inst, std::string_view address);
100void EmitLoadGlobal64(EmitContext& ctx, IR::Inst& inst, std::string_view address);
101void EmitLoadGlobal128(EmitContext& ctx, IR::Inst& inst, std::string_view address);
102void EmitWriteGlobalU8(EmitContext& ctx);
103void EmitWriteGlobalS8(EmitContext& ctx);
104void EmitWriteGlobalU16(EmitContext& ctx);
105void EmitWriteGlobalS16(EmitContext& ctx);
106void EmitWriteGlobal32(EmitContext& ctx, std::string_view address, std::string_view value);
107void EmitWriteGlobal64(EmitContext& ctx, std::string_view address, std::string_view value);
108void EmitWriteGlobal128(EmitContext& ctx, std::string_view address, std::string_view value);
109void EmitLoadStorageU8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
110 const IR::Value& offset);
111void EmitLoadStorageS8(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
112 const IR::Value& offset);
113void EmitLoadStorageU16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
114 const IR::Value& offset);
115void EmitLoadStorageS16(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
116 const IR::Value& offset);
117void EmitLoadStorage32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
118 const IR::Value& offset);
119void EmitLoadStorage64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
120 const IR::Value& offset);
121void EmitLoadStorage128(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
122 const IR::Value& offset);
123void EmitWriteStorageU8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
124 std::string_view value);
125void EmitWriteStorageS8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
126 std::string_view value);
127void EmitWriteStorageU16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
128 std::string_view value);
129void EmitWriteStorageS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
130 std::string_view value);
131void EmitWriteStorage32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
132 std::string_view value);
133void EmitWriteStorage64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
134 std::string_view value);
135void EmitWriteStorage128(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
136 std::string_view value);
137void EmitLoadSharedU8(EmitContext& ctx, IR::Inst& inst, std::string_view offset);
138void EmitLoadSharedS8(EmitContext& ctx, IR::Inst& inst, std::string_view offset);
139void EmitLoadSharedU16(EmitContext& ctx, IR::Inst& inst, std::string_view offset);
140void EmitLoadSharedS16(EmitContext& ctx, IR::Inst& inst, std::string_view offset);
141void EmitLoadSharedU32(EmitContext& ctx, IR::Inst& inst, std::string_view offset);
142void EmitLoadSharedU64(EmitContext& ctx, IR::Inst& inst, std::string_view offset);
143void EmitLoadSharedU128(EmitContext& ctx, IR::Inst& inst, std::string_view offset);
144void EmitWriteSharedU8(EmitContext& ctx, std::string_view offset, std::string_view value);
145void EmitWriteSharedU16(EmitContext& ctx, std::string_view offset, std::string_view value);
146void EmitWriteSharedU32(EmitContext& ctx, std::string_view offset, std::string_view value);
147void EmitWriteSharedU64(EmitContext& ctx, std::string_view offset, std::string_view value);
148void EmitWriteSharedU128(EmitContext& ctx, std::string_view offset, std::string_view value);
149void EmitCompositeConstructU32x2(EmitContext& ctx, IR::Inst& inst, std::string_view e1,
150 std::string_view e2);
151void EmitCompositeConstructU32x3(EmitContext& ctx, IR::Inst& inst, std::string_view e1,
152 std::string_view e2, std::string_view e3);
153void EmitCompositeConstructU32x4(EmitContext& ctx, IR::Inst& inst, std::string_view e1,
154 std::string_view e2, std::string_view e3, std::string_view e4);
155void EmitCompositeExtractU32x2(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
156 u32 index);
157void EmitCompositeExtractU32x3(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
158 u32 index);
159void EmitCompositeExtractU32x4(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
160 u32 index);
161void EmitCompositeInsertU32x2(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
162 std::string_view object, u32 index);
163void EmitCompositeInsertU32x3(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
164 std::string_view object, u32 index);
165void EmitCompositeInsertU32x4(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
166 std::string_view object, u32 index);
167void EmitCompositeConstructF16x2(EmitContext& ctx, std::string_view e1, std::string_view e2);
168void EmitCompositeConstructF16x3(EmitContext& ctx, std::string_view e1, std::string_view e2,
169 std::string_view e3);
170void EmitCompositeConstructF16x4(EmitContext& ctx, std::string_view e1, std::string_view e2,
171 std::string_view e3, std::string_view e4);
172void EmitCompositeExtractF16x2(EmitContext& ctx, std::string_view composite, u32 index);
173void EmitCompositeExtractF16x3(EmitContext& ctx, std::string_view composite, u32 index);
174void EmitCompositeExtractF16x4(EmitContext& ctx, std::string_view composite, u32 index);
175void EmitCompositeInsertF16x2(EmitContext& ctx, std::string_view composite, std::string_view object,
176 u32 index);
177void EmitCompositeInsertF16x3(EmitContext& ctx, std::string_view composite, std::string_view object,
178 u32 index);
179void EmitCompositeInsertF16x4(EmitContext& ctx, std::string_view composite, std::string_view object,
180 u32 index);
181void EmitCompositeConstructF32x2(EmitContext& ctx, IR::Inst& inst, std::string_view e1,
182 std::string_view e2);
183void EmitCompositeConstructF32x3(EmitContext& ctx, IR::Inst& inst, std::string_view e1,
184 std::string_view e2, std::string_view e3);
185void EmitCompositeConstructF32x4(EmitContext& ctx, IR::Inst& inst, std::string_view e1,
186 std::string_view e2, std::string_view e3, std::string_view e4);
187void EmitCompositeExtractF32x2(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
188 u32 index);
189void EmitCompositeExtractF32x3(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
190 u32 index);
191void EmitCompositeExtractF32x4(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
192 u32 index);
193void EmitCompositeInsertF32x2(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
194 std::string_view object, u32 index);
195void EmitCompositeInsertF32x3(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
196 std::string_view object, u32 index);
197void EmitCompositeInsertF32x4(EmitContext& ctx, IR::Inst& inst, std::string_view composite,
198 std::string_view object, u32 index);
199void EmitCompositeConstructF64x2(EmitContext& ctx);
200void EmitCompositeConstructF64x3(EmitContext& ctx);
201void EmitCompositeConstructF64x4(EmitContext& ctx);
202void EmitCompositeExtractF64x2(EmitContext& ctx);
203void EmitCompositeExtractF64x3(EmitContext& ctx);
204void EmitCompositeExtractF64x4(EmitContext& ctx);
205void EmitCompositeInsertF64x2(EmitContext& ctx, std::string_view composite, std::string_view object,
206 u32 index);
207void EmitCompositeInsertF64x3(EmitContext& ctx, std::string_view composite, std::string_view object,
208 u32 index);
209void EmitCompositeInsertF64x4(EmitContext& ctx, std::string_view composite, std::string_view object,
210 u32 index);
211void EmitSelectU1(EmitContext& ctx, IR::Inst& inst, std::string_view cond,
212 std::string_view true_value, std::string_view false_value);
213void EmitSelectU8(EmitContext& ctx, std::string_view cond, std::string_view true_value,
214 std::string_view false_value);
215void EmitSelectU16(EmitContext& ctx, std::string_view cond, std::string_view true_value,
216 std::string_view false_value);
217void EmitSelectU32(EmitContext& ctx, IR::Inst& inst, std::string_view cond,
218 std::string_view true_value, std::string_view false_value);
219void EmitSelectU64(EmitContext& ctx, IR::Inst& inst, std::string_view cond,
220 std::string_view true_value, std::string_view false_value);
221void EmitSelectF16(EmitContext& ctx, std::string_view cond, std::string_view true_value,
222 std::string_view false_value);
223void EmitSelectF32(EmitContext& ctx, IR::Inst& inst, std::string_view cond,
224 std::string_view true_value, std::string_view false_value);
225void EmitSelectF64(EmitContext& ctx, IR::Inst& inst, std::string_view cond,
226 std::string_view true_value, std::string_view false_value);
227void EmitBitCastU16F16(EmitContext& ctx, IR::Inst& inst);
228void EmitBitCastU32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
229void EmitBitCastU64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
230void EmitBitCastF16U16(EmitContext& ctx, IR::Inst& inst);
231void EmitBitCastF32U32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
232void EmitBitCastF64U64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
233void EmitPackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
234void EmitUnpackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
235void EmitPackFloat2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
236void EmitUnpackFloat2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
237void EmitPackHalf2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
238void EmitUnpackHalf2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
239void EmitPackDouble2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
240void EmitUnpackDouble2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
241void EmitGetZeroFromOp(EmitContext& ctx);
242void EmitGetSignFromOp(EmitContext& ctx);
243void EmitGetCarryFromOp(EmitContext& ctx);
244void EmitGetOverflowFromOp(EmitContext& ctx);
245void EmitGetSparseFromOp(EmitContext& ctx);
246void EmitGetInBoundsFromOp(EmitContext& ctx);
247void EmitFPAbs16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
248void EmitFPAbs32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
249void EmitFPAbs64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
250void EmitFPAdd16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
251void EmitFPAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
252void EmitFPAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
253void EmitFPFma16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b,
254 std::string_view c);
255void EmitFPFma32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b,
256 std::string_view c);
257void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b,
258 std::string_view c);
259void EmitFPMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
260void EmitFPMax64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
261void EmitFPMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
262void EmitFPMin64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
263void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
264void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
265void EmitFPMul64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
266void EmitFPNeg16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
267void EmitFPNeg32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
268void EmitFPNeg64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
269void EmitFPSin(EmitContext& ctx, IR::Inst& inst, std::string_view value);
270void EmitFPCos(EmitContext& ctx, IR::Inst& inst, std::string_view value);
271void EmitFPExp2(EmitContext& ctx, IR::Inst& inst, std::string_view value);
272void EmitFPLog2(EmitContext& ctx, IR::Inst& inst, std::string_view value);
273void EmitFPRecip32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
274void EmitFPRecip64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
275void EmitFPRecipSqrt32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
276void EmitFPRecipSqrt64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
277void EmitFPSqrt(EmitContext& ctx, IR::Inst& inst, std::string_view value);
278void EmitFPSaturate16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
279void EmitFPSaturate32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
280void EmitFPSaturate64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
281void EmitFPClamp16(EmitContext& ctx, IR::Inst& inst, std::string_view value,
282 std::string_view min_value, std::string_view max_value);
283void EmitFPClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value,
284 std::string_view min_value, std::string_view max_value);
285void EmitFPClamp64(EmitContext& ctx, IR::Inst& inst, std::string_view value,
286 std::string_view min_value, std::string_view max_value);
287void EmitFPRoundEven16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
288void EmitFPRoundEven32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
289void EmitFPRoundEven64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
290void EmitFPFloor16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
291void EmitFPFloor32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
292void EmitFPFloor64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
293void EmitFPCeil16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
294void EmitFPCeil32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
295void EmitFPCeil64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
296void EmitFPTrunc16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
297void EmitFPTrunc32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
298void EmitFPTrunc64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
299void EmitFPOrdEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
300void EmitFPOrdEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
301void EmitFPOrdEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
302void EmitFPUnordEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
303void EmitFPUnordEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
304 std::string_view rhs);
305void EmitFPUnordEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
306 std::string_view rhs);
307void EmitFPOrdNotEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
308void EmitFPOrdNotEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
309 std::string_view rhs);
310void EmitFPOrdNotEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
311 std::string_view rhs);
312void EmitFPUnordNotEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
313void EmitFPUnordNotEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
314 std::string_view rhs);
315void EmitFPUnordNotEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
316 std::string_view rhs);
317void EmitFPOrdLessThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
318void EmitFPOrdLessThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
319 std::string_view rhs);
320void EmitFPOrdLessThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
321 std::string_view rhs);
322void EmitFPUnordLessThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
323void EmitFPUnordLessThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
324 std::string_view rhs);
325void EmitFPUnordLessThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
326 std::string_view rhs);
327void EmitFPOrdGreaterThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
328void EmitFPOrdGreaterThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
329 std::string_view rhs);
330void EmitFPOrdGreaterThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
331 std::string_view rhs);
332void EmitFPUnordGreaterThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
333void EmitFPUnordGreaterThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
334 std::string_view rhs);
335void EmitFPUnordGreaterThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
336 std::string_view rhs);
337void EmitFPOrdLessThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
338void EmitFPOrdLessThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
339 std::string_view rhs);
340void EmitFPOrdLessThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
341 std::string_view rhs);
342void EmitFPUnordLessThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
343void EmitFPUnordLessThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
344 std::string_view rhs);
345void EmitFPUnordLessThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
346 std::string_view rhs);
347void EmitFPOrdGreaterThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
348void EmitFPOrdGreaterThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
349 std::string_view rhs);
350void EmitFPOrdGreaterThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
351 std::string_view rhs);
352void EmitFPUnordGreaterThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs);
353void EmitFPUnordGreaterThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
354 std::string_view rhs);
355void EmitFPUnordGreaterThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
356 std::string_view rhs);
357void EmitFPIsNan16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
358void EmitFPIsNan32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
359void EmitFPIsNan64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
360void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
361void EmitIAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
362void EmitISub32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
363void EmitISub64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
364void EmitIMul32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
365void EmitINeg32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
366void EmitINeg64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
367void EmitIAbs32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
368void EmitShiftLeftLogical32(EmitContext& ctx, IR::Inst& inst, std::string_view base,
369 std::string_view shift);
370void EmitShiftLeftLogical64(EmitContext& ctx, IR::Inst& inst, std::string_view base,
371 std::string_view shift);
372void EmitShiftRightLogical32(EmitContext& ctx, IR::Inst& inst, std::string_view base,
373 std::string_view shift);
374void EmitShiftRightLogical64(EmitContext& ctx, IR::Inst& inst, std::string_view base,
375 std::string_view shift);
376void EmitShiftRightArithmetic32(EmitContext& ctx, IR::Inst& inst, std::string_view base,
377 std::string_view shift);
378void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst& inst, std::string_view base,
379 std::string_view shift);
380void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
381void EmitBitwiseOr32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
382void EmitBitwiseXor32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
383void EmitBitFieldInsert(EmitContext& ctx, IR::Inst& inst, std::string_view base,
384 std::string_view insert, std::string_view offset, std::string_view count);
385void EmitBitFieldSExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base,
386 std::string_view offset, std::string_view count);
387void EmitBitFieldUExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base,
388 std::string_view offset, std::string_view count);
389void EmitBitReverse32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
390void EmitBitCount32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
391void EmitBitwiseNot32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
392void EmitFindSMsb32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
393void EmitFindUMsb32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
394void EmitSMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
395void EmitUMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
396void EmitSMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
397void EmitUMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
398void EmitSClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min,
399 std::string_view max);
400void EmitUClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min,
401 std::string_view max);
402void EmitSLessThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
403void EmitULessThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
404void EmitIEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
405void EmitSLessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
406 std::string_view rhs);
407void EmitULessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
408 std::string_view rhs);
409void EmitSGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
410void EmitUGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
411void EmitINotEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
412void EmitSGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
413 std::string_view rhs);
414void EmitUGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
415 std::string_view rhs);
416void EmitSharedAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
417 std::string_view value);
418void EmitSharedAtomicSMin32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
419 std::string_view value);
420void EmitSharedAtomicUMin32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
421 std::string_view value);
422void EmitSharedAtomicSMax32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
423 std::string_view value);
424void EmitSharedAtomicUMax32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
425 std::string_view value);
426void EmitSharedAtomicInc32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
427 std::string_view value);
428void EmitSharedAtomicDec32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
429 std::string_view value);
430void EmitSharedAtomicAnd32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
431 std::string_view value);
432void EmitSharedAtomicOr32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
433 std::string_view value);
434void EmitSharedAtomicXor32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
435 std::string_view value);
436void EmitSharedAtomicExchange32(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
437 std::string_view value);
438void EmitSharedAtomicExchange64(EmitContext& ctx, IR::Inst& inst, std::string_view pointer_offset,
439 std::string_view value);
440void EmitStorageAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
441 const IR::Value& offset, std::string_view value);
442void EmitStorageAtomicSMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
443 const IR::Value& offset, std::string_view value);
444void EmitStorageAtomicUMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
445 const IR::Value& offset, std::string_view value);
446void EmitStorageAtomicSMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
447 const IR::Value& offset, std::string_view value);
448void EmitStorageAtomicUMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
449 const IR::Value& offset, std::string_view value);
450void EmitStorageAtomicInc32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
451 const IR::Value& offset, std::string_view value);
452void EmitStorageAtomicDec32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
453 const IR::Value& offset, std::string_view value);
454void EmitStorageAtomicAnd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
455 const IR::Value& offset, std::string_view value);
456void EmitStorageAtomicOr32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
457 const IR::Value& offset, std::string_view value);
458void EmitStorageAtomicXor32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
459 const IR::Value& offset, std::string_view value);
460void EmitStorageAtomicExchange32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
461 const IR::Value& offset, std::string_view value);
462void EmitStorageAtomicIAdd64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
463 const IR::Value& offset, std::string_view value);
464void EmitStorageAtomicSMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
465 const IR::Value& offset, std::string_view value);
466void EmitStorageAtomicUMin64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
467 const IR::Value& offset, std::string_view value);
468void EmitStorageAtomicSMax64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
469 const IR::Value& offset, std::string_view value);
470void EmitStorageAtomicUMax64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
471 const IR::Value& offset, std::string_view value);
472void EmitStorageAtomicAnd64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
473 const IR::Value& offset, std::string_view value);
474void EmitStorageAtomicOr64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
475 const IR::Value& offset, std::string_view value);
476void EmitStorageAtomicXor64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
477 const IR::Value& offset, std::string_view value);
478void EmitStorageAtomicExchange64(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
479 const IR::Value& offset, std::string_view value);
480void EmitStorageAtomicAddF32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
481 const IR::Value& offset, std::string_view value);
482void EmitStorageAtomicAddF16x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
483 const IR::Value& offset, std::string_view value);
484void EmitStorageAtomicAddF32x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
485 const IR::Value& offset, std::string_view value);
486void EmitStorageAtomicMinF16x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
487 const IR::Value& offset, std::string_view value);
488void EmitStorageAtomicMinF32x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
489 const IR::Value& offset, std::string_view value);
490void EmitStorageAtomicMaxF16x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
491 const IR::Value& offset, std::string_view value);
492void EmitStorageAtomicMaxF32x2(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
493 const IR::Value& offset, std::string_view value);
494void EmitGlobalAtomicIAdd32(EmitContext& ctx);
495void EmitGlobalAtomicSMin32(EmitContext& ctx);
496void EmitGlobalAtomicUMin32(EmitContext& ctx);
497void EmitGlobalAtomicSMax32(EmitContext& ctx);
498void EmitGlobalAtomicUMax32(EmitContext& ctx);
499void EmitGlobalAtomicInc32(EmitContext& ctx);
500void EmitGlobalAtomicDec32(EmitContext& ctx);
501void EmitGlobalAtomicAnd32(EmitContext& ctx);
502void EmitGlobalAtomicOr32(EmitContext& ctx);
503void EmitGlobalAtomicXor32(EmitContext& ctx);
504void EmitGlobalAtomicExchange32(EmitContext& ctx);
505void EmitGlobalAtomicIAdd64(EmitContext& ctx);
506void EmitGlobalAtomicSMin64(EmitContext& ctx);
507void EmitGlobalAtomicUMin64(EmitContext& ctx);
508void EmitGlobalAtomicSMax64(EmitContext& ctx);
509void EmitGlobalAtomicUMax64(EmitContext& ctx);
510void EmitGlobalAtomicInc64(EmitContext& ctx);
511void EmitGlobalAtomicDec64(EmitContext& ctx);
512void EmitGlobalAtomicAnd64(EmitContext& ctx);
513void EmitGlobalAtomicOr64(EmitContext& ctx);
514void EmitGlobalAtomicXor64(EmitContext& ctx);
515void EmitGlobalAtomicExchange64(EmitContext& ctx);
516void EmitGlobalAtomicAddF32(EmitContext& ctx);
517void EmitGlobalAtomicAddF16x2(EmitContext& ctx);
518void EmitGlobalAtomicAddF32x2(EmitContext& ctx);
519void EmitGlobalAtomicMinF16x2(EmitContext& ctx);
520void EmitGlobalAtomicMinF32x2(EmitContext& ctx);
521void EmitGlobalAtomicMaxF16x2(EmitContext& ctx);
522void EmitGlobalAtomicMaxF32x2(EmitContext& ctx);
523void EmitLogicalOr(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
524void EmitLogicalAnd(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
525void EmitLogicalXor(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
526void EmitLogicalNot(EmitContext& ctx, IR::Inst& inst, std::string_view value);
527void EmitConvertS16F16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
528void EmitConvertS16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
529void EmitConvertS16F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
530void EmitConvertS32F16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
531void EmitConvertS32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
532void EmitConvertS32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
533void EmitConvertS64F16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
534void EmitConvertS64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
535void EmitConvertS64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
536void EmitConvertU16F16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
537void EmitConvertU16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
538void EmitConvertU16F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
539void EmitConvertU32F16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
540void EmitConvertU32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
541void EmitConvertU32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
542void EmitConvertU64F16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
543void EmitConvertU64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
544void EmitConvertU64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
545void EmitConvertU64U32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
546void EmitConvertU32U64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
547void EmitConvertF16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
548void EmitConvertF32F16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
549void EmitConvertF32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
550void EmitConvertF64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
551void EmitConvertF16S8(EmitContext& ctx, IR::Inst& inst, std::string_view value);
552void EmitConvertF16S16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
553void EmitConvertF16S32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
554void EmitConvertF16S64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
555void EmitConvertF16U8(EmitContext& ctx, IR::Inst& inst, std::string_view value);
556void EmitConvertF16U16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
557void EmitConvertF16U32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
558void EmitConvertF16U64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
559void EmitConvertF32S8(EmitContext& ctx, IR::Inst& inst, std::string_view value);
560void EmitConvertF32S16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
561void EmitConvertF32S32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
562void EmitConvertF32S64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
563void EmitConvertF32U8(EmitContext& ctx, IR::Inst& inst, std::string_view value);
564void EmitConvertF32U16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
565void EmitConvertF32U32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
566void EmitConvertF32U64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
567void EmitConvertF64S8(EmitContext& ctx, IR::Inst& inst, std::string_view value);
568void EmitConvertF64S16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
569void EmitConvertF64S32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
570void EmitConvertF64S64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
571void EmitConvertF64U8(EmitContext& ctx, IR::Inst& inst, std::string_view value);
572void EmitConvertF64U16(EmitContext& ctx, IR::Inst& inst, std::string_view value);
573void EmitConvertF64U32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
574void EmitConvertF64U64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
575void EmitBindlessImageSampleImplicitLod(EmitContext&);
576void EmitBindlessImageSampleExplicitLod(EmitContext&);
577void EmitBindlessImageSampleDrefImplicitLod(EmitContext&);
578void EmitBindlessImageSampleDrefExplicitLod(EmitContext&);
579void EmitBindlessImageGather(EmitContext&);
580void EmitBindlessImageGatherDref(EmitContext&);
581void EmitBindlessImageFetch(EmitContext&);
582void EmitBindlessImageQueryDimensions(EmitContext&);
583void EmitBindlessImageQueryLod(EmitContext&);
584void EmitBindlessImageGradient(EmitContext&);
585void EmitBindlessImageRead(EmitContext&);
586void EmitBindlessImageWrite(EmitContext&);
587void EmitBoundImageSampleImplicitLod(EmitContext&);
588void EmitBoundImageSampleExplicitLod(EmitContext&);
589void EmitBoundImageSampleDrefImplicitLod(EmitContext&);
590void EmitBoundImageSampleDrefExplicitLod(EmitContext&);
591void EmitBoundImageGather(EmitContext&);
592void EmitBoundImageGatherDref(EmitContext&);
593void EmitBoundImageFetch(EmitContext&);
594void EmitBoundImageQueryDimensions(EmitContext&);
595void EmitBoundImageQueryLod(EmitContext&);
596void EmitBoundImageGradient(EmitContext&);
597void EmitBoundImageRead(EmitContext&);
598void EmitBoundImageWrite(EmitContext&);
599void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
600 std::string_view coords, std::string_view bias_lc,
601 const IR::Value& offset);
602void EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
603 std::string_view coords, std::string_view lod_lc,
604 const IR::Value& offset);
605void EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
606 std::string_view coords, std::string_view dref,
607 std::string_view bias_lc, const IR::Value& offset);
608void EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
609 std::string_view coords, std::string_view dref,
610 std::string_view lod_lc, const IR::Value& offset);
611void EmitImageGather(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
612 std::string_view coords, const IR::Value& offset, const IR::Value& offset2);
613void EmitImageGatherDref(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
614 std::string_view coords, const IR::Value& offset, const IR::Value& offset2,
615 std::string_view dref);
616void EmitImageFetch(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
617 std::string_view coords, std::string_view offset, std::string_view lod,
618 std::string_view ms);
619void EmitImageQueryDimensions(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
620 std::string_view lod);
621void EmitImageQueryLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
622 std::string_view coords);
623void EmitImageGradient(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
624 std::string_view coords, const IR::Value& derivatives,
625 const IR::Value& offset, const IR::Value& lod_clamp);
626void EmitImageRead(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
627 std::string_view coords);
628void EmitImageWrite(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
629 std::string_view coords, std::string_view color);
630void EmitBindlessImageAtomicIAdd32(EmitContext&);
631void EmitBindlessImageAtomicSMin32(EmitContext&);
632void EmitBindlessImageAtomicUMin32(EmitContext&);
633void EmitBindlessImageAtomicSMax32(EmitContext&);
634void EmitBindlessImageAtomicUMax32(EmitContext&);
635void EmitBindlessImageAtomicInc32(EmitContext&);
636void EmitBindlessImageAtomicDec32(EmitContext&);
637void EmitBindlessImageAtomicAnd32(EmitContext&);
638void EmitBindlessImageAtomicOr32(EmitContext&);
639void EmitBindlessImageAtomicXor32(EmitContext&);
640void EmitBindlessImageAtomicExchange32(EmitContext&);
641void EmitBoundImageAtomicIAdd32(EmitContext&);
642void EmitBoundImageAtomicSMin32(EmitContext&);
643void EmitBoundImageAtomicUMin32(EmitContext&);
644void EmitBoundImageAtomicSMax32(EmitContext&);
645void EmitBoundImageAtomicUMax32(EmitContext&);
646void EmitBoundImageAtomicInc32(EmitContext&);
647void EmitBoundImageAtomicDec32(EmitContext&);
648void EmitBoundImageAtomicAnd32(EmitContext&);
649void EmitBoundImageAtomicOr32(EmitContext&);
650void EmitBoundImageAtomicXor32(EmitContext&);
651void EmitBoundImageAtomicExchange32(EmitContext&);
652void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
653 std::string_view coords, std::string_view value);
654void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
655 std::string_view coords, std::string_view value);
656void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
657 std::string_view coords, std::string_view value);
658void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
659 std::string_view coords, std::string_view value);
660void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
661 std::string_view coords, std::string_view value);
662void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
663 std::string_view coords, std::string_view value);
664void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
665 std::string_view coords, std::string_view value);
666void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
667 std::string_view coords, std::string_view value);
668void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
669 std::string_view coords, std::string_view value);
670void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
671 std::string_view coords, std::string_view value);
672void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
673 std::string_view coords, std::string_view value);
674void EmitLaneId(EmitContext& ctx, IR::Inst& inst);
675void EmitVoteAll(EmitContext& ctx, IR::Inst& inst, std::string_view pred);
676void EmitVoteAny(EmitContext& ctx, IR::Inst& inst, std::string_view pred);
677void EmitVoteEqual(EmitContext& ctx, IR::Inst& inst, std::string_view pred);
678void EmitSubgroupBallot(EmitContext& ctx, IR::Inst& inst, std::string_view pred);
679void EmitSubgroupEqMask(EmitContext& ctx, IR::Inst& inst);
680void EmitSubgroupLtMask(EmitContext& ctx, IR::Inst& inst);
681void EmitSubgroupLeMask(EmitContext& ctx, IR::Inst& inst);
682void EmitSubgroupGtMask(EmitContext& ctx, IR::Inst& inst);
683void EmitSubgroupGeMask(EmitContext& ctx, IR::Inst& inst);
684void EmitShuffleIndex(EmitContext& ctx, IR::Inst& inst, std::string_view value,
685 std::string_view index, std::string_view clamp,
686 std::string_view segmentation_mask);
687void EmitShuffleUp(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view index,
688 std::string_view clamp, std::string_view segmentation_mask);
689void EmitShuffleDown(EmitContext& ctx, IR::Inst& inst, std::string_view value,
690 std::string_view index, std::string_view clamp,
691 std::string_view segmentation_mask);
692void EmitShuffleButterfly(EmitContext& ctx, IR::Inst& inst, std::string_view value,
693 std::string_view index, std::string_view clamp,
694 std::string_view segmentation_mask);
695void EmitFSwizzleAdd(EmitContext& ctx, IR::Inst& inst, std::string_view op_a, std::string_view op_b,
696 std::string_view swizzle);
697void EmitDPdxFine(EmitContext& ctx, IR::Inst& inst, std::string_view op_a);
698void EmitDPdyFine(EmitContext& ctx, IR::Inst& inst, std::string_view op_a);
699void EmitDPdxCoarse(EmitContext& ctx, IR::Inst& inst, std::string_view op_a);
700void EmitDPdyCoarse(EmitContext& ctx, IR::Inst& inst, std::string_view op_a);
701
702} // namespace Shader::Backend::GLSL