diff options
Diffstat (limited to 'src/video_core/fsr.cpp')
| -rw-r--r-- | src/video_core/fsr.cpp | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/src/video_core/fsr.cpp b/src/video_core/fsr.cpp index 5653c64fcc..a222fa3b1f 100644 --- a/src/video_core/fsr.cpp +++ b/src/video_core/fsr.cpp @@ -1,7 +1,11 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include <cmath> +#include <bit> #include "video_core/fsr.h" namespace FSR { @@ -95,7 +99,7 @@ u32 AU1_AH1_AF1(f32 f) { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, }; - const u32 u = Common::BitCast<u32>(f); + const u32 u = std::bit_cast<u32>(f); const u32 i = u >> 23; return base[i] + ((u & 0x7fffff) >> shift[i]); } @@ -107,20 +111,20 @@ u32 AU1_AH2_AF2(f32 a[2]) { void FsrEasuCon(u32 con0[4], u32 con1[4], u32 con2[4], u32 con3[4], f32 inputViewportInPixelsX, f32 inputViewportInPixelsY, f32 inputSizeInPixelsX, f32 inputSizeInPixelsY, f32 outputSizeInPixelsX, f32 outputSizeInPixelsY) { - con0[0] = Common::BitCast<u32>(inputViewportInPixelsX / outputSizeInPixelsX); - con0[1] = Common::BitCast<u32>(inputViewportInPixelsY / outputSizeInPixelsY); - con0[2] = Common::BitCast<u32>(0.5f * inputViewportInPixelsX / outputSizeInPixelsX - 0.5f); - con0[3] = Common::BitCast<u32>(0.5f * inputViewportInPixelsY / outputSizeInPixelsY - 0.5f); - con1[0] = Common::BitCast<u32>(1.0f / inputSizeInPixelsX); - con1[1] = Common::BitCast<u32>(1.0f / inputSizeInPixelsY); - con1[2] = Common::BitCast<u32>(1.0f / inputSizeInPixelsX); - con1[3] = Common::BitCast<u32>(-1.0f / inputSizeInPixelsY); - con2[0] = Common::BitCast<u32>(-1.0f / inputSizeInPixelsX); - con2[1] = Common::BitCast<u32>(2.0f / inputSizeInPixelsY); - con2[2] = Common::BitCast<u32>(1.0f / inputSizeInPixelsX); - con2[3] = Common::BitCast<u32>(2.0f / inputSizeInPixelsY); - con3[0] = Common::BitCast<u32>(0.0f / inputSizeInPixelsX); - con3[1] = Common::BitCast<u32>(4.0f / inputSizeInPixelsY); + con0[0] = std::bit_cast<u32>(inputViewportInPixelsX / outputSizeInPixelsX); + con0[1] = std::bit_cast<u32>(inputViewportInPixelsY / outputSizeInPixelsY); + con0[2] = std::bit_cast<u32>(0.5f * inputViewportInPixelsX / outputSizeInPixelsX - 0.5f); + con0[3] = std::bit_cast<u32>(0.5f * inputViewportInPixelsY / outputSizeInPixelsY - 0.5f); + con1[0] = std::bit_cast<u32>(1.0f / inputSizeInPixelsX); + con1[1] = std::bit_cast<u32>(1.0f / inputSizeInPixelsY); + con1[2] = std::bit_cast<u32>(1.0f / inputSizeInPixelsX); + con1[3] = std::bit_cast<u32>(-1.0f / inputSizeInPixelsY); + con2[0] = std::bit_cast<u32>(-1.0f / inputSizeInPixelsX); + con2[1] = std::bit_cast<u32>(2.0f / inputSizeInPixelsY); + con2[2] = std::bit_cast<u32>(1.0f / inputSizeInPixelsX); + con2[3] = std::bit_cast<u32>(2.0f / inputSizeInPixelsY); + con3[0] = std::bit_cast<u32>(0.0f / inputSizeInPixelsX); + con3[1] = std::bit_cast<u32>(4.0f / inputSizeInPixelsY); con3[2] = con3[3] = 0; } } // Anonymous namespace @@ -131,16 +135,16 @@ void FsrEasuConOffset(u32 con0[4], u32 con1[4], u32 con2[4], u32 con3[4], f32 outputSizeInPixelsY, f32 inputOffsetInPixelsX, f32 inputOffsetInPixelsY) { FsrEasuCon(con0, con1, con2, con3, inputViewportInPixelsX, inputViewportInPixelsY, inputSizeInPixelsX, inputSizeInPixelsY, outputSizeInPixelsX, outputSizeInPixelsY); - con0[2] = Common::BitCast<u32>(0.5f * inputViewportInPixelsX / outputSizeInPixelsX - 0.5f + + con0[2] = std::bit_cast<u32>(0.5f * inputViewportInPixelsX / outputSizeInPixelsX - 0.5f + inputOffsetInPixelsX); - con0[3] = Common::BitCast<u32>(0.5f * inputViewportInPixelsY / outputSizeInPixelsY - 0.5f + + con0[3] = std::bit_cast<u32>(0.5f * inputViewportInPixelsY / outputSizeInPixelsY - 0.5f + inputOffsetInPixelsY); } void FsrRcasCon(u32* con, f32 sharpness) { sharpness = std::exp2f(-sharpness); f32 hSharp[2]{sharpness, sharpness}; - con[0] = Common::BitCast<u32>(sharpness); + con[0] = std::bit_cast<u32>(sharpness); con[1] = AU1_AH2_AF2(hSharp); con[2] = 0; con[3] = 0; |
