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