emit_spirv_composite.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. // Copyright 2021 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "shader_recompiler/backend/spirv/emit_spirv_instructions.h"
  5. #include "shader_recompiler/backend/spirv/spirv_emit_context.h"
  6. namespace Shader::Backend::SPIRV {
  7. Id EmitCompositeConstructU32x2(EmitContext& ctx, Id e1, Id e2) {
  8. return ctx.OpCompositeConstruct(ctx.U32[2], e1, e2);
  9. }
  10. Id EmitCompositeConstructU32x3(EmitContext& ctx, Id e1, Id e2, Id e3) {
  11. return ctx.OpCompositeConstruct(ctx.U32[3], e1, e2, e3);
  12. }
  13. Id EmitCompositeConstructU32x4(EmitContext& ctx, Id e1, Id e2, Id e3, Id e4) {
  14. return ctx.OpCompositeConstruct(ctx.U32[4], e1, e2, e3, e4);
  15. }
  16. Id EmitCompositeExtractU32x2(EmitContext& ctx, Id composite, u32 index) {
  17. return ctx.OpCompositeExtract(ctx.U32[1], composite, index);
  18. }
  19. Id EmitCompositeExtractU32x3(EmitContext& ctx, Id composite, u32 index) {
  20. return ctx.OpCompositeExtract(ctx.U32[1], composite, index);
  21. }
  22. Id EmitCompositeExtractU32x4(EmitContext& ctx, Id composite, u32 index) {
  23. return ctx.OpCompositeExtract(ctx.U32[1], composite, index);
  24. }
  25. Id EmitCompositeInsertU32x2(EmitContext& ctx, Id composite, Id object, u32 index) {
  26. return ctx.OpCompositeInsert(ctx.U32[2], object, composite, index);
  27. }
  28. Id EmitCompositeInsertU32x3(EmitContext& ctx, Id composite, Id object, u32 index) {
  29. return ctx.OpCompositeInsert(ctx.U32[3], object, composite, index);
  30. }
  31. Id EmitCompositeInsertU32x4(EmitContext& ctx, Id composite, Id object, u32 index) {
  32. return ctx.OpCompositeInsert(ctx.U32[4], object, composite, index);
  33. }
  34. Id EmitCompositeConstructF16x2(EmitContext& ctx, Id e1, Id e2) {
  35. return ctx.OpCompositeConstruct(ctx.F16[2], e1, e2);
  36. }
  37. Id EmitCompositeConstructF16x3(EmitContext& ctx, Id e1, Id e2, Id e3) {
  38. return ctx.OpCompositeConstruct(ctx.F16[3], e1, e2, e3);
  39. }
  40. Id EmitCompositeConstructF16x4(EmitContext& ctx, Id e1, Id e2, Id e3, Id e4) {
  41. return ctx.OpCompositeConstruct(ctx.F16[4], e1, e2, e3, e4);
  42. }
  43. Id EmitCompositeExtractF16x2(EmitContext& ctx, Id composite, u32 index) {
  44. return ctx.OpCompositeExtract(ctx.F16[1], composite, index);
  45. }
  46. Id EmitCompositeExtractF16x3(EmitContext& ctx, Id composite, u32 index) {
  47. return ctx.OpCompositeExtract(ctx.F16[1], composite, index);
  48. }
  49. Id EmitCompositeExtractF16x4(EmitContext& ctx, Id composite, u32 index) {
  50. return ctx.OpCompositeExtract(ctx.F16[1], composite, index);
  51. }
  52. Id EmitCompositeInsertF16x2(EmitContext& ctx, Id composite, Id object, u32 index) {
  53. return ctx.OpCompositeInsert(ctx.F16[2], object, composite, index);
  54. }
  55. Id EmitCompositeInsertF16x3(EmitContext& ctx, Id composite, Id object, u32 index) {
  56. return ctx.OpCompositeInsert(ctx.F16[3], object, composite, index);
  57. }
  58. Id EmitCompositeInsertF16x4(EmitContext& ctx, Id composite, Id object, u32 index) {
  59. return ctx.OpCompositeInsert(ctx.F16[4], object, composite, index);
  60. }
  61. Id EmitCompositeConstructF32x2(EmitContext& ctx, Id e1, Id e2) {
  62. return ctx.OpCompositeConstruct(ctx.F32[2], e1, e2);
  63. }
  64. Id EmitCompositeConstructF32x3(EmitContext& ctx, Id e1, Id e2, Id e3) {
  65. return ctx.OpCompositeConstruct(ctx.F32[3], e1, e2, e3);
  66. }
  67. Id EmitCompositeConstructF32x4(EmitContext& ctx, Id e1, Id e2, Id e3, Id e4) {
  68. return ctx.OpCompositeConstruct(ctx.F32[4], e1, e2, e3, e4);
  69. }
  70. Id EmitCompositeExtractF32x2(EmitContext& ctx, Id composite, u32 index) {
  71. return ctx.OpCompositeExtract(ctx.F32[1], composite, index);
  72. }
  73. Id EmitCompositeExtractF32x3(EmitContext& ctx, Id composite, u32 index) {
  74. return ctx.OpCompositeExtract(ctx.F32[1], composite, index);
  75. }
  76. Id EmitCompositeExtractF32x4(EmitContext& ctx, Id composite, u32 index) {
  77. return ctx.OpCompositeExtract(ctx.F32[1], composite, index);
  78. }
  79. Id EmitCompositeInsertF32x2(EmitContext& ctx, Id composite, Id object, u32 index) {
  80. return ctx.OpCompositeInsert(ctx.F32[2], object, composite, index);
  81. }
  82. Id EmitCompositeInsertF32x3(EmitContext& ctx, Id composite, Id object, u32 index) {
  83. return ctx.OpCompositeInsert(ctx.F32[3], object, composite, index);
  84. }
  85. Id EmitCompositeInsertF32x4(EmitContext& ctx, Id composite, Id object, u32 index) {
  86. return ctx.OpCompositeInsert(ctx.F32[4], object, composite, index);
  87. }
  88. void EmitCompositeConstructF64x2(EmitContext&) {
  89. throw NotImplementedException("SPIR-V Instruction");
  90. }
  91. void EmitCompositeConstructF64x3(EmitContext&) {
  92. throw NotImplementedException("SPIR-V Instruction");
  93. }
  94. void EmitCompositeConstructF64x4(EmitContext&) {
  95. throw NotImplementedException("SPIR-V Instruction");
  96. }
  97. void EmitCompositeExtractF64x2(EmitContext&) {
  98. throw NotImplementedException("SPIR-V Instruction");
  99. }
  100. void EmitCompositeExtractF64x3(EmitContext&) {
  101. throw NotImplementedException("SPIR-V Instruction");
  102. }
  103. void EmitCompositeExtractF64x4(EmitContext&) {
  104. throw NotImplementedException("SPIR-V Instruction");
  105. }
  106. Id EmitCompositeInsertF64x2(EmitContext& ctx, Id composite, Id object, u32 index) {
  107. return ctx.OpCompositeInsert(ctx.F64[2], object, composite, index);
  108. }
  109. Id EmitCompositeInsertF64x3(EmitContext& ctx, Id composite, Id object, u32 index) {
  110. return ctx.OpCompositeInsert(ctx.F64[3], object, composite, index);
  111. }
  112. Id EmitCompositeInsertF64x4(EmitContext& ctx, Id composite, Id object, u32 index) {
  113. return ctx.OpCompositeInsert(ctx.F64[4], object, composite, index);
  114. }
  115. } // namespace Shader::Backend::SPIRV