diff options
| author | 2021-03-24 00:02:30 +0100 | |
|---|---|---|
| committer | 2021-07-22 21:51:24 -0400 | |
| commit | 8cb9443cb99c4510e6ef26a91d09a31a8fa6281f (patch) | |
| tree | 2337f294c7179e1e2e98cafedde5c2eb254965cb /src/shader_recompiler/frontend/ir/ir_emitter.cpp | |
| parent | shader: Implement NDC [-1, 1], attribute types and default varying initializa... (diff) | |
| download | yuzu-8cb9443cb99c4510e6ef26a91d09a31a8fa6281f.tar.gz yuzu-8cb9443cb99c4510e6ef26a91d09a31a8fa6281f.tar.xz yuzu-8cb9443cb99c4510e6ef26a91d09a31a8fa6281f.zip | |
shader: Fix F2I
Diffstat (limited to 'src/shader_recompiler/frontend/ir/ir_emitter.cpp')
| -rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index ce610799a..6280c08f6 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp | |||
| @@ -731,6 +731,24 @@ F16F32F64 IREmitter::FPSaturate(const F16F32F64& value) { | |||
| 731 | } | 731 | } |
| 732 | } | 732 | } |
| 733 | 733 | ||
| 734 | F16F32F64 IREmitter::FPClamp(const F16F32F64& value, const F16F32F64& min_value, | ||
| 735 | const F16F32F64& max_value) { | ||
| 736 | if (value.Type() != min_value.Type() || value.Type() != max_value.Type()) { | ||
| 737 | throw InvalidArgument("Mismatching types {}, {}, and {}", value.Type(), min_value.Type(), | ||
| 738 | max_value.Type()); | ||
| 739 | } | ||
| 740 | switch (value.Type()) { | ||
| 741 | case Type::F16: | ||
| 742 | return Inst<F16>(Opcode::FPClamp16, value, min_value, max_value); | ||
| 743 | case Type::F32: | ||
| 744 | return Inst<F32>(Opcode::FPClamp32, value, min_value, max_value); | ||
| 745 | case Type::F64: | ||
| 746 | return Inst<F64>(Opcode::FPClamp64, value, min_value, max_value); | ||
| 747 | default: | ||
| 748 | ThrowInvalidType(value.Type()); | ||
| 749 | } | ||
| 750 | } | ||
| 751 | |||
| 734 | F16F32F64 IREmitter::FPRoundEven(const F16F32F64& value, FpControl control) { | 752 | F16F32F64 IREmitter::FPRoundEven(const F16F32F64& value, FpControl control) { |
| 735 | switch (value.Type()) { | 753 | switch (value.Type()) { |
| 736 | case Type::F16: | 754 | case Type::F16: |