emit_spirv_instructions.h 34 KB

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