diff options
author | namkazy <nam.kazt.91@gmail.com> | 2020-04-05 09:46:43 +0200 |
---|---|---|
committer | namkazy <nam.kazt.91@gmail.com> | 2020-04-05 09:46:43 +0200 |
commit | 6f2b7087c28cb4fea46485987540f2b9a7a6640d (patch) | |
tree | a7a5a6f3af49f005b1b5bf014c46003df7daf7bd | |
parent | clang-format (diff) | |
download | yuzu-6f2b7087c28cb4fea46485987540f2b9a7a6640d.tar yuzu-6f2b7087c28cb4fea46485987540f2b9a7a6640d.tar.gz yuzu-6f2b7087c28cb4fea46485987540f2b9a7a6640d.tar.bz2 yuzu-6f2b7087c28cb4fea46485987540f2b9a7a6640d.tar.lz yuzu-6f2b7087c28cb4fea46485987540f2b9a7a6640d.tar.xz yuzu-6f2b7087c28cb4fea46485987540f2b9a7a6640d.tar.zst yuzu-6f2b7087c28cb4fea46485987540f2b9a7a6640d.zip |
-rw-r--r-- | src/video_core/shader/decode/image.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/video_core/shader/decode/image.cpp b/src/video_core/shader/decode/image.cpp index c125674b2..efcf271dc 100644 --- a/src/video_core/shader/decode/image.cpp +++ b/src/video_core/shader/decode/image.cpp @@ -350,25 +350,24 @@ u32 ShaderIR::DecodeImage(NodeBlock& bb, u32 pc) { Node converted_value = [&] { switch (component_type) { case ComponentType::SNORM: { + is_signed = true; // range [-1.0, 1.0] - auto cnv_value = - Operation(OperationCode::FAdd, original_value, Immediate(1.f)); - cnv_value = Operation(OperationCode::FMul, std::move(cnv_value), - Immediate(127.f)); - is_signed = false; - return SignedOperation(OperationCode::ICastFloat, is_signed, - std::move(cnv_value)); + auto cnv_value = Operation(OperationCode::FMul, original_value, Immediate(127.f)); + cnv_value = SignedOperation(OperationCode::ICastFloat, is_signed, + std::move(cnv_value)); + return BitfieldExtract(std::move(cnv_value), 0, 8); } case ComponentType::UNORM: { + is_signed = false; // range [0.0, 1.0] auto cnv_value = Operation(OperationCode::FMul, original_value, Immediate(255.f)); - is_signed = false; return SignedOperation(OperationCode::ICastFloat, is_signed, std::move(cnv_value)); } - case ComponentType::SINT: // range [-128,128] - return Operation(OperationCode::IAdd, original_value, Immediate(128)); + case ComponentType::SINT: // range [-128,127] + is_signed = true; + return original_value; case ComponentType::UINT: // range [0, 255] is_signed = false; return original_value; |