emit_glasm_not_implemented.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  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& ctx) {
  18. NotImplemented();
  19. }
  20. void EmitBranch(EmitContext& ctx) {
  21. NotImplemented();
  22. }
  23. void EmitBranchConditional(EmitContext& ctx) {
  24. NotImplemented();
  25. }
  26. void EmitLoopMerge(EmitContext& ctx) {
  27. NotImplemented();
  28. }
  29. void EmitSelectionMerge(EmitContext& ctx) {
  30. NotImplemented();
  31. }
  32. void EmitReturn(EmitContext& ctx) {
  33. ctx.Add("RET;");
  34. }
  35. void EmitJoin(EmitContext& ctx) {
  36. NotImplemented();
  37. }
  38. void EmitUnreachable(EmitContext& ctx) {
  39. NotImplemented();
  40. }
  41. void EmitDemoteToHelperInvocation(EmitContext& ctx) {
  42. NotImplemented();
  43. }
  44. void EmitBarrier(EmitContext& ctx) {
  45. NotImplemented();
  46. }
  47. void EmitWorkgroupMemoryBarrier(EmitContext& ctx) {
  48. NotImplemented();
  49. }
  50. void EmitDeviceMemoryBarrier(EmitContext& ctx) {
  51. NotImplemented();
  52. }
  53. void EmitPrologue(EmitContext& ctx) {
  54. // TODO
  55. }
  56. void EmitEpilogue(EmitContext& ctx) {
  57. // TODO
  58. }
  59. void EmitEmitVertex(EmitContext& ctx, const IR::Value& stream) {
  60. NotImplemented();
  61. }
  62. void EmitEndPrimitive(EmitContext& ctx, const IR::Value& stream) {
  63. NotImplemented();
  64. }
  65. void EmitGetRegister(EmitContext& ctx) {
  66. NotImplemented();
  67. }
  68. void EmitSetRegister(EmitContext& ctx) {
  69. NotImplemented();
  70. }
  71. void EmitGetPred(EmitContext& ctx) {
  72. NotImplemented();
  73. }
  74. void EmitSetPred(EmitContext& ctx) {
  75. NotImplemented();
  76. }
  77. void EmitSetGotoVariable(EmitContext& ctx) {
  78. NotImplemented();
  79. }
  80. void EmitGetGotoVariable(EmitContext& ctx) {
  81. NotImplemented();
  82. }
  83. void EmitSetIndirectBranchVariable(EmitContext& ctx) {
  84. NotImplemented();
  85. }
  86. void EmitGetIndirectBranchVariable(EmitContext& ctx) {
  87. NotImplemented();
  88. }
  89. void EmitGetZFlag(EmitContext& ctx) {
  90. NotImplemented();
  91. }
  92. void EmitGetSFlag(EmitContext& ctx) {
  93. NotImplemented();
  94. }
  95. void EmitGetCFlag(EmitContext& ctx) {
  96. NotImplemented();
  97. }
  98. void EmitGetOFlag(EmitContext& ctx) {
  99. NotImplemented();
  100. }
  101. void EmitSetZFlag(EmitContext& ctx) {
  102. NotImplemented();
  103. }
  104. void EmitSetSFlag(EmitContext& ctx) {
  105. NotImplemented();
  106. }
  107. void EmitSetCFlag(EmitContext& ctx) {
  108. NotImplemented();
  109. }
  110. void EmitSetOFlag(EmitContext& ctx) {
  111. NotImplemented();
  112. }
  113. void EmitWorkgroupId(EmitContext& ctx) {
  114. NotImplemented();
  115. }
  116. void EmitLocalInvocationId(EmitContext& ctx, IR::Inst& inst) {
  117. ctx.Add("MOV.S {},invocation.localid;", inst);
  118. }
  119. void EmitInvocationId(EmitContext& ctx) {
  120. NotImplemented();
  121. }
  122. void EmitSampleId(EmitContext& ctx) {
  123. NotImplemented();
  124. }
  125. void EmitIsHelperInvocation(EmitContext& ctx) {
  126. NotImplemented();
  127. }
  128. void EmitYDirection(EmitContext& ctx) {
  129. NotImplemented();
  130. }
  131. void EmitLoadLocal(EmitContext& ctx, ScalarU32 word_offset) {
  132. NotImplemented();
  133. }
  134. void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value) {
  135. NotImplemented();
  136. }
  137. void EmitUndefU1(EmitContext& ctx) {
  138. NotImplemented();
  139. }
  140. void EmitUndefU8(EmitContext& ctx) {
  141. NotImplemented();
  142. }
  143. void EmitUndefU16(EmitContext& ctx) {
  144. NotImplemented();
  145. }
  146. void EmitUndefU32(EmitContext& ctx) {
  147. NotImplemented();
  148. }
  149. void EmitUndefU64(EmitContext& ctx) {
  150. NotImplemented();
  151. }
  152. void EmitLoadSharedU8(EmitContext& ctx, ScalarU32 offset) {
  153. NotImplemented();
  154. }
  155. void EmitLoadSharedS8(EmitContext& ctx, ScalarU32 offset) {
  156. NotImplemented();
  157. }
  158. void EmitLoadSharedU16(EmitContext& ctx, ScalarU32 offset) {
  159. NotImplemented();
  160. }
  161. void EmitLoadSharedS16(EmitContext& ctx, ScalarU32 offset) {
  162. NotImplemented();
  163. }
  164. void EmitLoadSharedU32(EmitContext& ctx, ScalarU32 offset) {
  165. NotImplemented();
  166. }
  167. void EmitLoadSharedU64(EmitContext& ctx, ScalarU32 offset) {
  168. NotImplemented();
  169. }
  170. void EmitLoadSharedU128(EmitContext& ctx, ScalarU32 offset) {
  171. NotImplemented();
  172. }
  173. void EmitWriteSharedU8(EmitContext& ctx, ScalarU32 offset, ScalarU32 value) {
  174. NotImplemented();
  175. }
  176. void EmitWriteSharedU16(EmitContext& ctx, ScalarU32 offset, ScalarU32 value) {
  177. NotImplemented();
  178. }
  179. void EmitWriteSharedU32(EmitContext& ctx, ScalarU32 offset, ScalarU32 value) {
  180. NotImplemented();
  181. }
  182. void EmitWriteSharedU64(EmitContext& ctx, ScalarU32 offset, Register value) {
  183. NotImplemented();
  184. }
  185. void EmitWriteSharedU128(EmitContext& ctx, ScalarU32 offset, Register value) {
  186. NotImplemented();
  187. }
  188. void EmitGetZeroFromOp(EmitContext& ctx) {
  189. NotImplemented();
  190. }
  191. void EmitGetSignFromOp(EmitContext& ctx) {
  192. NotImplemented();
  193. }
  194. void EmitGetCarryFromOp(EmitContext& ctx) {
  195. NotImplemented();
  196. }
  197. void EmitGetOverflowFromOp(EmitContext& ctx) {
  198. NotImplemented();
  199. }
  200. void EmitGetSparseFromOp(EmitContext& ctx) {
  201. NotImplemented();
  202. }
  203. void EmitGetInBoundsFromOp(EmitContext& ctx) {
  204. NotImplemented();
  205. }
  206. void EmitSharedAtomicIAdd32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  207. NotImplemented();
  208. }
  209. void EmitSharedAtomicSMin32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarS32 value) {
  210. NotImplemented();
  211. }
  212. void EmitSharedAtomicUMin32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  213. NotImplemented();
  214. }
  215. void EmitSharedAtomicSMax32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarS32 value) {
  216. NotImplemented();
  217. }
  218. void EmitSharedAtomicUMax32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  219. NotImplemented();
  220. }
  221. void EmitSharedAtomicInc32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  222. NotImplemented();
  223. }
  224. void EmitSharedAtomicDec32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  225. NotImplemented();
  226. }
  227. void EmitSharedAtomicAnd32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  228. NotImplemented();
  229. }
  230. void EmitSharedAtomicOr32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  231. NotImplemented();
  232. }
  233. void EmitSharedAtomicXor32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  234. NotImplemented();
  235. }
  236. void EmitSharedAtomicExchange32(EmitContext& ctx, ScalarU32 pointer_offset, ScalarU32 value) {
  237. NotImplemented();
  238. }
  239. void EmitSharedAtomicExchange64(EmitContext& ctx, ScalarU32 pointer_offset, Register value) {
  240. NotImplemented();
  241. }
  242. void EmitLogicalOr(EmitContext& ctx, IR::Inst& inst, ScalarS32 a, ScalarS32 b) {
  243. ctx.Add("OR.S {},{},{};", inst, a, b);
  244. }
  245. void EmitLogicalAnd(EmitContext& ctx, IR::Inst& inst, ScalarS32 a, ScalarS32 b) {
  246. ctx.Add("AND.S {},{},{};", inst, a, b);
  247. }
  248. void EmitLogicalXor(EmitContext& ctx, IR::Inst& inst, ScalarS32 a, ScalarS32 b) {
  249. ctx.Add("XOR.S {},{},{};", inst, a, b);
  250. }
  251. void EmitLogicalNot(EmitContext& ctx, IR::Inst& inst, ScalarS32 value) {
  252. ctx.Add("SEQ.S {},{},0;", inst, value);
  253. }
  254. void EmitBindlessImageSampleImplicitLod(EmitContext&) {
  255. NotImplemented();
  256. }
  257. void EmitBindlessImageSampleExplicitLod(EmitContext&) {
  258. NotImplemented();
  259. }
  260. void EmitBindlessImageSampleDrefImplicitLod(EmitContext&) {
  261. NotImplemented();
  262. }
  263. void EmitBindlessImageSampleDrefExplicitLod(EmitContext&) {
  264. NotImplemented();
  265. }
  266. void EmitBindlessImageGather(EmitContext&) {
  267. NotImplemented();
  268. }
  269. void EmitBindlessImageGatherDref(EmitContext&) {
  270. NotImplemented();
  271. }
  272. void EmitBindlessImageFetch(EmitContext&) {
  273. NotImplemented();
  274. }
  275. void EmitBindlessImageQueryDimensions(EmitContext&) {
  276. NotImplemented();
  277. }
  278. void EmitBindlessImageQueryLod(EmitContext&) {
  279. NotImplemented();
  280. }
  281. void EmitBindlessImageGradient(EmitContext&) {
  282. NotImplemented();
  283. }
  284. void EmitBindlessImageRead(EmitContext&) {
  285. NotImplemented();
  286. }
  287. void EmitBindlessImageWrite(EmitContext&) {
  288. NotImplemented();
  289. }
  290. void EmitBoundImageSampleImplicitLod(EmitContext&) {
  291. NotImplemented();
  292. }
  293. void EmitBoundImageSampleExplicitLod(EmitContext&) {
  294. NotImplemented();
  295. }
  296. void EmitBoundImageSampleDrefImplicitLod(EmitContext&) {
  297. NotImplemented();
  298. }
  299. void EmitBoundImageSampleDrefExplicitLod(EmitContext&) {
  300. NotImplemented();
  301. }
  302. void EmitBoundImageGather(EmitContext&) {
  303. NotImplemented();
  304. }
  305. void EmitBoundImageGatherDref(EmitContext&) {
  306. NotImplemented();
  307. }
  308. void EmitBoundImageFetch(EmitContext&) {
  309. NotImplemented();
  310. }
  311. void EmitBoundImageQueryDimensions(EmitContext&) {
  312. NotImplemented();
  313. }
  314. void EmitBoundImageQueryLod(EmitContext&) {
  315. NotImplemented();
  316. }
  317. void EmitBoundImageGradient(EmitContext&) {
  318. NotImplemented();
  319. }
  320. void EmitBoundImageRead(EmitContext&) {
  321. NotImplemented();
  322. }
  323. void EmitBoundImageWrite(EmitContext&) {
  324. NotImplemented();
  325. }
  326. void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  327. Register coords, Register bias_lc, const IR::Value& offset) {
  328. NotImplemented();
  329. }
  330. void EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  331. Register coords, Register lod_lc, const IR::Value& offset) {
  332. NotImplemented();
  333. }
  334. void EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  335. Register coords, Register dref, Register bias_lc,
  336. const IR::Value& offset) {
  337. NotImplemented();
  338. }
  339. void EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  340. Register coords, Register dref, Register lod_lc,
  341. const IR::Value& offset) {
  342. NotImplemented();
  343. }
  344. void EmitImageGather(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  345. const IR::Value& offset, const IR::Value& offset2) {
  346. NotImplemented();
  347. }
  348. void EmitImageGatherDref(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  349. const IR::Value& offset, const IR::Value& offset2, Register dref) {
  350. NotImplemented();
  351. }
  352. void EmitImageFetch(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  353. Register offset, Register lod, Register ms) {
  354. NotImplemented();
  355. }
  356. void EmitImageQueryDimensions(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  357. Register lod) {
  358. NotImplemented();
  359. }
  360. void EmitImageQueryLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords) {
  361. NotImplemented();
  362. }
  363. void EmitImageGradient(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  364. Register derivates, Register offset, Register lod_clamp) {
  365. NotImplemented();
  366. }
  367. void EmitImageRead(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords) {
  368. NotImplemented();
  369. }
  370. void EmitImageWrite(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  371. Register color) {
  372. NotImplemented();
  373. }
  374. void EmitBindlessImageAtomicIAdd32(EmitContext&) {
  375. NotImplemented();
  376. }
  377. void EmitBindlessImageAtomicSMin32(EmitContext&) {
  378. NotImplemented();
  379. }
  380. void EmitBindlessImageAtomicUMin32(EmitContext&) {
  381. NotImplemented();
  382. }
  383. void EmitBindlessImageAtomicSMax32(EmitContext&) {
  384. NotImplemented();
  385. }
  386. void EmitBindlessImageAtomicUMax32(EmitContext&) {
  387. NotImplemented();
  388. }
  389. void EmitBindlessImageAtomicInc32(EmitContext&) {
  390. NotImplemented();
  391. }
  392. void EmitBindlessImageAtomicDec32(EmitContext&) {
  393. NotImplemented();
  394. }
  395. void EmitBindlessImageAtomicAnd32(EmitContext&) {
  396. NotImplemented();
  397. }
  398. void EmitBindlessImageAtomicOr32(EmitContext&) {
  399. NotImplemented();
  400. }
  401. void EmitBindlessImageAtomicXor32(EmitContext&) {
  402. NotImplemented();
  403. }
  404. void EmitBindlessImageAtomicExchange32(EmitContext&) {
  405. NotImplemented();
  406. }
  407. void EmitBoundImageAtomicIAdd32(EmitContext&) {
  408. NotImplemented();
  409. }
  410. void EmitBoundImageAtomicSMin32(EmitContext&) {
  411. NotImplemented();
  412. }
  413. void EmitBoundImageAtomicUMin32(EmitContext&) {
  414. NotImplemented();
  415. }
  416. void EmitBoundImageAtomicSMax32(EmitContext&) {
  417. NotImplemented();
  418. }
  419. void EmitBoundImageAtomicUMax32(EmitContext&) {
  420. NotImplemented();
  421. }
  422. void EmitBoundImageAtomicInc32(EmitContext&) {
  423. NotImplemented();
  424. }
  425. void EmitBoundImageAtomicDec32(EmitContext&) {
  426. NotImplemented();
  427. }
  428. void EmitBoundImageAtomicAnd32(EmitContext&) {
  429. NotImplemented();
  430. }
  431. void EmitBoundImageAtomicOr32(EmitContext&) {
  432. NotImplemented();
  433. }
  434. void EmitBoundImageAtomicXor32(EmitContext&) {
  435. NotImplemented();
  436. }
  437. void EmitBoundImageAtomicExchange32(EmitContext&) {
  438. NotImplemented();
  439. }
  440. void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  441. Register coords, ScalarU32 value) {
  442. NotImplemented();
  443. }
  444. void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  445. Register coords, ScalarS32 value) {
  446. NotImplemented();
  447. }
  448. void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  449. Register coords, ScalarU32 value) {
  450. NotImplemented();
  451. }
  452. void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  453. Register coords, ScalarS32 value) {
  454. NotImplemented();
  455. }
  456. void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  457. Register coords, ScalarU32 value) {
  458. NotImplemented();
  459. }
  460. void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  461. ScalarU32 value) {
  462. NotImplemented();
  463. }
  464. void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  465. ScalarU32 value) {
  466. NotImplemented();
  467. }
  468. void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  469. ScalarU32 value) {
  470. NotImplemented();
  471. }
  472. void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  473. ScalarU32 value) {
  474. NotImplemented();
  475. }
  476. void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, Register coords,
  477. ScalarU32 value) {
  478. NotImplemented();
  479. }
  480. void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
  481. Register coords, ScalarU32 value) {
  482. NotImplemented();
  483. }
  484. void EmitLaneId(EmitContext& ctx) {
  485. NotImplemented();
  486. }
  487. void EmitVoteAll(EmitContext& ctx, ScalarS32 pred) {
  488. NotImplemented();
  489. }
  490. void EmitVoteAny(EmitContext& ctx, ScalarS32 pred) {
  491. NotImplemented();
  492. }
  493. void EmitVoteEqual(EmitContext& ctx, ScalarS32 pred) {
  494. NotImplemented();
  495. }
  496. void EmitSubgroupBallot(EmitContext& ctx, ScalarS32 pred) {
  497. NotImplemented();
  498. }
  499. void EmitSubgroupEqMask(EmitContext& ctx) {
  500. NotImplemented();
  501. }
  502. void EmitSubgroupLtMask(EmitContext& ctx) {
  503. NotImplemented();
  504. }
  505. void EmitSubgroupLeMask(EmitContext& ctx) {
  506. NotImplemented();
  507. }
  508. void EmitSubgroupGtMask(EmitContext& ctx) {
  509. NotImplemented();
  510. }
  511. void EmitSubgroupGeMask(EmitContext& ctx) {
  512. NotImplemented();
  513. }
  514. void EmitShuffleIndex(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 index,
  515. ScalarU32 clamp, ScalarU32 segmentation_mask) {
  516. NotImplemented();
  517. }
  518. void EmitShuffleUp(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 index,
  519. ScalarU32 clamp, ScalarU32 segmentation_mask) {
  520. NotImplemented();
  521. }
  522. void EmitShuffleDown(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 index,
  523. ScalarU32 clamp, ScalarU32 segmentation_mask) {
  524. NotImplemented();
  525. }
  526. void EmitShuffleButterfly(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, ScalarU32 index,
  527. ScalarU32 clamp, ScalarU32 segmentation_mask) {
  528. NotImplemented();
  529. }
  530. void EmitFSwizzleAdd(EmitContext& ctx, ScalarF32 op_a, ScalarF32 op_b, ScalarU32 swizzle) {
  531. NotImplemented();
  532. }
  533. void EmitDPdxFine(EmitContext& ctx, ScalarF32 op_a) {
  534. NotImplemented();
  535. }
  536. void EmitDPdyFine(EmitContext& ctx, ScalarF32 op_a) {
  537. NotImplemented();
  538. }
  539. void EmitDPdxCoarse(EmitContext& ctx, ScalarF32 op_a) {
  540. NotImplemented();
  541. }
  542. void EmitDPdyCoarse(EmitContext& ctx, ScalarF32 op_a) {
  543. NotImplemented();
  544. }
  545. } // namespace Shader::Backend::GLASM