emit_glasm_not_implemented.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. // Copyright 2021 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <string_view>
  5. #include "shader_recompiler/backend/glasm/emit_context.h"
  6. #include "shader_recompiler/backend/glasm/emit_glasm_instructions.h"
  7. #include "shader_recompiler/frontend/ir/program.h"
  8. #include "shader_recompiler/frontend/ir/value.h"
  9. #ifdef _MSC_VER
  10. #pragma warning(disable : 4100)
  11. #endif
  12. namespace Shader::Backend::GLASM {
  13. #define NotImplemented() throw NotImplementedException("GLASM instruction {}", __LINE__)
  14. void EmitPhi(EmitContext& ctx, IR::Inst& inst) {
  15. NotImplemented();
  16. }
  17. void EmitVoid(EmitContext&) {}
  18. void EmitBranch(EmitContext& ctx) {
  19. NotImplemented();
  20. }
  21. void EmitBranchConditional(EmitContext& ctx) {
  22. NotImplemented();
  23. }
  24. void EmitLoopMerge(EmitContext& ctx) {
  25. NotImplemented();
  26. }
  27. void EmitSelectionMerge(EmitContext& ctx) {
  28. NotImplemented();
  29. }
  30. void EmitReturn(EmitContext& ctx) {
  31. ctx.Add("RET;");
  32. }
  33. void EmitJoin(EmitContext& ctx) {
  34. NotImplemented();
  35. }
  36. void EmitUnreachable(EmitContext& ctx) {
  37. NotImplemented();
  38. }
  39. void EmitDemoteToHelperInvocation(EmitContext& ctx) {
  40. NotImplemented();
  41. }
  42. void EmitBarrier(EmitContext& ctx) {
  43. NotImplemented();
  44. }
  45. void EmitWorkgroupMemoryBarrier(EmitContext& ctx) {
  46. NotImplemented();
  47. }
  48. void EmitDeviceMemoryBarrier(EmitContext& ctx) {
  49. NotImplemented();
  50. }
  51. void EmitPrologue(EmitContext& ctx) {
  52. // TODO
  53. }
  54. void EmitEpilogue(EmitContext& ctx) {
  55. // TODO
  56. }
  57. void EmitEmitVertex(EmitContext& ctx, const IR::Value& stream) {
  58. NotImplemented();
  59. }
  60. void EmitEndPrimitive(EmitContext& ctx, const IR::Value& stream) {
  61. NotImplemented();
  62. }
  63. void EmitGetRegister(EmitContext& ctx) {
  64. NotImplemented();
  65. }
  66. void EmitSetRegister(EmitContext& ctx) {
  67. NotImplemented();
  68. }
  69. void EmitGetPred(EmitContext& ctx) {
  70. NotImplemented();
  71. }
  72. void EmitSetPred(EmitContext& ctx) {
  73. NotImplemented();
  74. }
  75. void EmitSetGotoVariable(EmitContext& ctx) {
  76. NotImplemented();
  77. }
  78. void EmitGetGotoVariable(EmitContext& ctx) {
  79. NotImplemented();
  80. }
  81. void EmitSetIndirectBranchVariable(EmitContext& ctx) {
  82. NotImplemented();
  83. }
  84. void EmitGetIndirectBranchVariable(EmitContext& ctx) {
  85. NotImplemented();
  86. }
  87. void EmitGetZFlag(EmitContext& ctx) {
  88. NotImplemented();
  89. }
  90. void EmitGetSFlag(EmitContext& ctx) {
  91. NotImplemented();
  92. }
  93. void EmitGetCFlag(EmitContext& ctx) {
  94. NotImplemented();
  95. }
  96. void EmitGetOFlag(EmitContext& ctx) {
  97. NotImplemented();
  98. }
  99. void EmitSetZFlag(EmitContext& ctx) {
  100. NotImplemented();
  101. }
  102. void EmitSetSFlag(EmitContext& ctx) {
  103. NotImplemented();
  104. }
  105. void EmitSetCFlag(EmitContext& ctx) {
  106. NotImplemented();
  107. }
  108. void EmitSetOFlag(EmitContext& ctx) {
  109. NotImplemented();
  110. }
  111. void EmitWorkgroupId(EmitContext& ctx) {
  112. NotImplemented();
  113. }
  114. void EmitLocalInvocationId(EmitContext& ctx, IR::Inst& inst) {
  115. ctx.Add("MOV.S {},invocation.localid;", inst);
  116. }
  117. void EmitInvocationId(EmitContext& ctx) {
  118. NotImplemented();
  119. }
  120. void EmitSampleId(EmitContext& ctx) {
  121. NotImplemented();
  122. }
  123. void EmitIsHelperInvocation(EmitContext& ctx) {
  124. NotImplemented();
  125. }
  126. void EmitYDirection(EmitContext& ctx) {
  127. NotImplemented();
  128. }
  129. void EmitLoadLocal(EmitContext& ctx, ScalarU32 word_offset) {
  130. NotImplemented();
  131. }
  132. void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value) {
  133. NotImplemented();
  134. }
  135. void EmitUndefU1(EmitContext& ctx) {
  136. NotImplemented();
  137. }
  138. void EmitUndefU8(EmitContext& ctx) {
  139. NotImplemented();
  140. }
  141. void EmitUndefU16(EmitContext& ctx) {
  142. NotImplemented();
  143. }
  144. void EmitUndefU32(EmitContext& ctx) {
  145. NotImplemented();
  146. }
  147. void EmitUndefU64(EmitContext& ctx) {
  148. NotImplemented();
  149. }
  150. void EmitGetZeroFromOp(EmitContext& ctx) {
  151. NotImplemented();
  152. }
  153. void EmitGetSignFromOp(EmitContext& ctx) {
  154. NotImplemented();
  155. }
  156. void EmitGetCarryFromOp(EmitContext& ctx) {
  157. NotImplemented();
  158. }
  159. void EmitGetOverflowFromOp(EmitContext& ctx) {
  160. NotImplemented();
  161. }
  162. void EmitGetSparseFromOp(EmitContext& ctx) {
  163. NotImplemented();
  164. }
  165. void EmitGetInBoundsFromOp(EmitContext& ctx) {
  166. NotImplemented();
  167. }
  168. void EmitLogicalOr(EmitContext& ctx, IR::Inst& inst, ScalarS32 a, ScalarS32 b) {
  169. ctx.Add("OR.S {},{},{};", inst, a, b);
  170. }
  171. void EmitLogicalAnd(EmitContext& ctx, IR::Inst& inst, ScalarS32 a, ScalarS32 b) {
  172. ctx.Add("AND.S {},{},{};", inst, a, b);
  173. }
  174. void EmitLogicalXor(EmitContext& ctx, IR::Inst& inst, ScalarS32 a, ScalarS32 b) {
  175. ctx.Add("XOR.S {},{},{};", inst, a, b);
  176. }
  177. void EmitLogicalNot(EmitContext& ctx, IR::Inst& inst, ScalarS32 value) {
  178. ctx.Add("SEQ.S {},{},0;", inst, value);
  179. }
  180. void EmitBindlessImageSampleImplicitLod(EmitContext&) {
  181. NotImplemented();
  182. }
  183. void EmitBindlessImageSampleExplicitLod(EmitContext&) {
  184. NotImplemented();
  185. }
  186. void EmitBindlessImageSampleDrefImplicitLod(EmitContext&) {
  187. NotImplemented();
  188. }
  189. void EmitBindlessImageSampleDrefExplicitLod(EmitContext&) {
  190. NotImplemented();
  191. }
  192. void EmitBindlessImageGather(EmitContext&) {
  193. NotImplemented();
  194. }
  195. void EmitBindlessImageGatherDref(EmitContext&) {
  196. NotImplemented();
  197. }
  198. void EmitBindlessImageFetch(EmitContext&) {
  199. NotImplemented();
  200. }
  201. void EmitBindlessImageQueryDimensions(EmitContext&) {
  202. NotImplemented();
  203. }
  204. void EmitBindlessImageQueryLod(EmitContext&) {
  205. NotImplemented();
  206. }
  207. void EmitBindlessImageGradient(EmitContext&) {
  208. NotImplemented();
  209. }
  210. void EmitBindlessImageRead(EmitContext&) {
  211. NotImplemented();
  212. }
  213. void EmitBindlessImageWrite(EmitContext&) {
  214. NotImplemented();
  215. }
  216. void EmitBoundImageSampleImplicitLod(EmitContext&) {
  217. NotImplemented();
  218. }
  219. void EmitBoundImageSampleExplicitLod(EmitContext&) {
  220. NotImplemented();
  221. }
  222. void EmitBoundImageSampleDrefImplicitLod(EmitContext&) {
  223. NotImplemented();
  224. }
  225. void EmitBoundImageSampleDrefExplicitLod(EmitContext&) {
  226. NotImplemented();
  227. }
  228. void EmitBoundImageGather(EmitContext&) {
  229. NotImplemented();
  230. }
  231. void EmitBoundImageGatherDref(EmitContext&) {
  232. NotImplemented();
  233. }
  234. void EmitBoundImageFetch(EmitContext&) {
  235. NotImplemented();
  236. }
  237. void EmitBoundImageQueryDimensions(EmitContext&) {
  238. NotImplemented();
  239. }
  240. void EmitBoundImageQueryLod(EmitContext&) {
  241. NotImplemented();
  242. }
  243. void EmitBoundImageGradient(EmitContext&) {
  244. NotImplemented();
  245. }
  246. void EmitBoundImageRead(EmitContext&) {
  247. NotImplemented();
  248. }
  249. void EmitBoundImageWrite(EmitContext&) {
  250. NotImplemented();
  251. }
  252. void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  253. Register coords, Register bias_lc, const IR::Value& offset) {
  254. NotImplemented();
  255. }
  256. void EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  257. Register coords, Register lod_lc, const IR::Value& offset) {
  258. NotImplemented();
  259. }
  260. void EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  261. Register coords, Register dref, Register bias_lc,
  262. const IR::Value& offset) {
  263. NotImplemented();
  264. }
  265. void EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  266. Register coords, Register dref, Register lod_lc,
  267. const IR::Value& offset) {
  268. NotImplemented();
  269. }
  270. void EmitImageGather(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  271. const IR::Value& offset, const IR::Value& offset2) {
  272. NotImplemented();
  273. }
  274. void EmitImageGatherDref(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  275. const IR::Value& offset, const IR::Value& offset2, Register dref) {
  276. NotImplemented();
  277. }
  278. void EmitImageFetch(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  279. Register offset, Register lod, Register ms) {
  280. NotImplemented();
  281. }
  282. void EmitImageQueryDimensions(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  283. Register lod) {
  284. NotImplemented();
  285. }
  286. void EmitImageQueryLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords) {
  287. NotImplemented();
  288. }
  289. void EmitImageGradient(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  290. Register derivates, Register offset, Register lod_clamp) {
  291. NotImplemented();
  292. }
  293. void EmitImageRead(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords) {
  294. NotImplemented();
  295. }
  296. void EmitImageWrite(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  297. Register color) {
  298. NotImplemented();
  299. }
  300. void EmitBindlessImageAtomicIAdd32(EmitContext&) {
  301. NotImplemented();
  302. }
  303. void EmitBindlessImageAtomicSMin32(EmitContext&) {
  304. NotImplemented();
  305. }
  306. void EmitBindlessImageAtomicUMin32(EmitContext&) {
  307. NotImplemented();
  308. }
  309. void EmitBindlessImageAtomicSMax32(EmitContext&) {
  310. NotImplemented();
  311. }
  312. void EmitBindlessImageAtomicUMax32(EmitContext&) {
  313. NotImplemented();
  314. }
  315. void EmitBindlessImageAtomicInc32(EmitContext&) {
  316. NotImplemented();
  317. }
  318. void EmitBindlessImageAtomicDec32(EmitContext&) {
  319. NotImplemented();
  320. }
  321. void EmitBindlessImageAtomicAnd32(EmitContext&) {
  322. NotImplemented();
  323. }
  324. void EmitBindlessImageAtomicOr32(EmitContext&) {
  325. NotImplemented();
  326. }
  327. void EmitBindlessImageAtomicXor32(EmitContext&) {
  328. NotImplemented();
  329. }
  330. void EmitBindlessImageAtomicExchange32(EmitContext&) {
  331. NotImplemented();
  332. }
  333. void EmitBoundImageAtomicIAdd32(EmitContext&) {
  334. NotImplemented();
  335. }
  336. void EmitBoundImageAtomicSMin32(EmitContext&) {
  337. NotImplemented();
  338. }
  339. void EmitBoundImageAtomicUMin32(EmitContext&) {
  340. NotImplemented();
  341. }
  342. void EmitBoundImageAtomicSMax32(EmitContext&) {
  343. NotImplemented();
  344. }
  345. void EmitBoundImageAtomicUMax32(EmitContext&) {
  346. NotImplemented();
  347. }
  348. void EmitBoundImageAtomicInc32(EmitContext&) {
  349. NotImplemented();
  350. }
  351. void EmitBoundImageAtomicDec32(EmitContext&) {
  352. NotImplemented();
  353. }
  354. void EmitBoundImageAtomicAnd32(EmitContext&) {
  355. NotImplemented();
  356. }
  357. void EmitBoundImageAtomicOr32(EmitContext&) {
  358. NotImplemented();
  359. }
  360. void EmitBoundImageAtomicXor32(EmitContext&) {
  361. NotImplemented();
  362. }
  363. void EmitBoundImageAtomicExchange32(EmitContext&) {
  364. NotImplemented();
  365. }
  366. void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  367. Register coords, ScalarU32 value) {
  368. NotImplemented();
  369. }
  370. void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  371. Register coords, ScalarS32 value) {
  372. NotImplemented();
  373. }
  374. void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  375. Register coords, ScalarU32 value) {
  376. NotImplemented();
  377. }
  378. void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  379. Register coords, ScalarS32 value) {
  380. NotImplemented();
  381. }
  382. void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  383. Register coords, ScalarU32 value) {
  384. NotImplemented();
  385. }
  386. void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  387. ScalarU32 value) {
  388. NotImplemented();
  389. }
  390. void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  391. ScalarU32 value) {
  392. NotImplemented();
  393. }
  394. void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  395. ScalarU32 value) {
  396. NotImplemented();
  397. }
  398. void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  399. ScalarU32 value) {
  400. NotImplemented();
  401. }
  402. void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  403. ScalarU32 value) {
  404. NotImplemented();
  405. }
  406. void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  407. Register coords, ScalarU32 value) {
  408. NotImplemented();
  409. }
  410. } // namespace Shader::Backend::GLASM