diff --git a/pcsx2-qt/Settings/GraphicsSettingsWidget.ui b/pcsx2-qt/Settings/GraphicsSettingsWidget.ui index 6bd11fcb30..e097717193 100644 --- a/pcsx2-qt/Settings/GraphicsSettingsWidget.ui +++ b/pcsx2-qt/Settings/GraphicsSettingsWidget.ui @@ -104,6 +104,11 @@ Widescreen (16:9) + + + Native (10:7) + + @@ -135,6 +140,11 @@ Widescreen (16:9) + + + Native (10:7) + + diff --git a/pcsx2/Config.h b/pcsx2/Config.h index 8d6daaabe7..6f4b995747 100644 --- a/pcsx2/Config.h +++ b/pcsx2/Config.h @@ -196,6 +196,7 @@ enum class AspectRatioType : u8 RAuto4_3_3_2, R4_3, R16_9, + R10_7, MaxCount }; @@ -205,6 +206,7 @@ enum class FMVAspectRatioSwitchType : u8 RAuto4_3_3_2, R4_3, R16_9, + R10_7, MaxCount }; diff --git a/pcsx2/Counters.cpp b/pcsx2/Counters.cpp index 3dab071191..7b12f3acd1 100644 --- a/pcsx2/Counters.cpp +++ b/pcsx2/Counters.cpp @@ -469,6 +469,9 @@ static __fi void DoFMVSwitch() case FMVAspectRatioSwitchType::R16_9: EmuConfig.CurrentAspectRatio = new_fmv_state ? AspectRatioType::R16_9 : EmuConfig.GS.AspectRatio; break; + case FMVAspectRatioSwitchType::R10_7: + EmuConfig.CurrentAspectRatio = new_fmv_state ? AspectRatioType::R10_7 : EmuConfig.GS.AspectRatio; + break; default: break; } diff --git a/pcsx2/GS/Renderers/Common/GSRenderer.cpp b/pcsx2/GS/Renderers/Common/GSRenderer.cpp index 2ac36da07b..e564e0e6d2 100644 --- a/pcsx2/GS/Renderers/Common/GSRenderer.cpp +++ b/pcsx2/GS/Renderers/Common/GSRenderer.cpp @@ -277,7 +277,7 @@ float GSRenderer::GetModXYOffset() static float GetCurrentAspectRatioFloat(bool is_progressive) { - static constexpr std::array(AspectRatioType::MaxCount) + 1> ars = {{4.0f / 3.0f, 4.0f / 3.0f, 4.0f / 3.0f, 16.0f / 9.0f, 3.0f / 2.0f}}; + static constexpr std::array(AspectRatioType::MaxCount) + 1> ars = {{4.0f / 3.0f, 4.0f / 3.0f, 4.0f / 3.0f, 16.0f / 9.0f, 10.0f / 7.0f, 3.0f / 2.0f}}; return ars[static_cast(GSConfig.AspectRatio) + (3u * (is_progressive && GSConfig.AspectRatio == AspectRatioType::RAuto4_3_3_2))]; } @@ -300,7 +300,13 @@ static GSVector4 CalculateDrawDstRect(s32 window_width, s32 window_height, const targetAr = 4.0f / 3.0f; } else if (EmuConfig.CurrentAspectRatio == AspectRatioType::R16_9) + { targetAr = 16.0f / 9.0f; + } + else if (EmuConfig.CurrentAspectRatio == AspectRatioType::R10_7) + { + targetAr = 10.0f / 7.0f; + } const float crop_adjust = (static_cast(src_rect.width()) / static_cast(src_size.x)) / (static_cast(src_rect.height()) / static_cast(src_size.y)); diff --git a/pcsx2/Pcsx2Config.cpp b/pcsx2/Pcsx2Config.cpp index 3e112c93c8..c78c8dfe1e 100644 --- a/pcsx2/Pcsx2Config.cpp +++ b/pcsx2/Pcsx2Config.cpp @@ -553,6 +553,7 @@ const char* Pcsx2Config::GSOptions::AspectRatioNames[] = { "Auto 4:3/3:2", "4:3", "16:9", + "10:7", nullptr}; const char* Pcsx2Config::GSOptions::FMVAspectRatioSwitchNames[] = { @@ -560,6 +561,7 @@ const char* Pcsx2Config::GSOptions::FMVAspectRatioSwitchNames[] = { "Auto 4:3/3:2", "4:3", "16:9", + "10:7", nullptr}; const char* Pcsx2Config::GSOptions::BlendingLevelNames[] = { diff --git a/pcsx2/VMManager.cpp b/pcsx2/VMManager.cpp index 5f80dce94e..a9811a56bf 100644 --- a/pcsx2/VMManager.cpp +++ b/pcsx2/VMManager.cpp @@ -877,6 +877,9 @@ void VMManager::RequestDisplaySize(float scale /*= 0.0f*/) case AspectRatioType::R16_9: x_scale = (16.0f / 9.0f) / (static_cast(iwidth) / static_cast(iheight)); break; + case AspectRatioType::R10_7: + x_scale = (10.0f / 7.0f) / (static_cast(iwidth) / static_cast(iheight)); + break; case AspectRatioType::Stretch: default: x_scale = 1.0f;