emit_spirv_bitwise_conversion.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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.h"
  5. #include "shader_recompiler/backend/spirv/emit_spirv_instructions.h"
  6. namespace Shader::Backend::SPIRV {
  7. void EmitBitCastU16F16(EmitContext&) {
  8. throw NotImplementedException("SPIR-V Instruction");
  9. }
  10. Id EmitBitCastU32F32(EmitContext& ctx, Id value) {
  11. return ctx.OpBitcast(ctx.U32[1], value);
  12. }
  13. void EmitBitCastU64F64(EmitContext&) {
  14. throw NotImplementedException("SPIR-V Instruction");
  15. }
  16. void EmitBitCastF16U16(EmitContext&) {
  17. throw NotImplementedException("SPIR-V Instruction");
  18. }
  19. Id EmitBitCastF32U32(EmitContext& ctx, Id value) {
  20. return ctx.OpBitcast(ctx.F32[1], value);
  21. }
  22. void EmitBitCastF64U64(EmitContext&) {
  23. throw NotImplementedException("SPIR-V Instruction");
  24. }
  25. Id EmitPackUint2x32(EmitContext& ctx, Id value) {
  26. return ctx.OpBitcast(ctx.U64, value);
  27. }
  28. Id EmitUnpackUint2x32(EmitContext& ctx, Id value) {
  29. return ctx.OpBitcast(ctx.U32[2], value);
  30. }
  31. Id EmitPackFloat2x16(EmitContext& ctx, Id value) {
  32. return ctx.OpBitcast(ctx.U32[1], value);
  33. }
  34. Id EmitUnpackFloat2x16(EmitContext& ctx, Id value) {
  35. return ctx.OpBitcast(ctx.F16[2], value);
  36. }
  37. Id EmitPackHalf2x16(EmitContext& ctx, Id value) {
  38. return ctx.OpPackHalf2x16(ctx.U32[1], value);
  39. }
  40. Id EmitUnpackHalf2x16(EmitContext& ctx, Id value) {
  41. return ctx.OpUnpackHalf2x16(ctx.F32[2], value);
  42. }
  43. Id EmitPackDouble2x32(EmitContext& ctx, Id value) {
  44. return ctx.OpBitcast(ctx.F64[1], value);
  45. }
  46. Id EmitUnpackDouble2x32(EmitContext& ctx, Id value) {
  47. return ctx.OpBitcast(ctx.U32[2], value);
  48. }
  49. } // namespace Shader::Backend::SPIRV