Compare commits

...

3 Commits

Author SHA1 Message Date
Matías Locatti
8e5590106a Intel ARC is the new AyyMD
ARC seems to benefit from using immediate too, so let's remove the AMD check.
2023-02-18 17:56:23 -03:00
Matías Locatti
c357af9923 eep 2023-02-18 08:32:37 -03:00
Matías Locatti
89d4c84ec0 Allow AMD proprietary drivers to disable vsync
The original logic for presentation was done before the vsync toggle in graphics > advanced was added, afaik.
NVIDIA drivers can run games at framerates higher than the display's refresh rate while in mailbox (triple buffer) mode, but AMD proprietary drivers get locked to the refresh rate of the display.
While having tearing is undesired, Smash players use high framerate mods to reduce the hardcoded input delay of the game, and not everyone has access to >120 Hz monitors.
Letting 60 Hz AMD users have the choice between being able to use the 120 FPS mod with tearing, or stopping tearing and sticking to 60 FPS is a better option IMO.
2023-02-18 06:15:04 -03:00

View File

@@ -36,18 +36,23 @@ VkSurfaceFormatKHR ChooseSwapSurfaceFormat(vk::Span<VkSurfaceFormatKHR> formats)
VkPresentModeKHR ChooseSwapPresentMode(vk::Span<VkPresentModeKHR> modes) {
// Mailbox (triple buffering) doesn't lock the application like fifo (vsync),
// prefer it if vsync option is not selected
// AMD proprietary drivers can't render past the screen's refresh rate
const auto found_mailbox = std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_MAILBOX_KHR);
if (Settings::values.fullscreen_mode.GetValue() == Settings::FullscreenMode::Borderless &&
found_mailbox != modes.end() && !Settings::values.use_vsync.GetValue()) {
return VK_PRESENT_MODE_MAILBOX_KHR;
const auto found_imm = std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_IMMEDIATE_KHR);
if (!Settings::values.use_speed_limit.GetValue() && found_imm != modes.end()) {
return VK_PRESENT_MODE_IMMEDIATE_KHR;
}
if (!Settings::values.use_speed_limit.GetValue()) {
// FIFO present mode locks the framerate to the monitor's refresh rate,
// Find an alternative to surpass this limitation if FPS is unlocked.
const auto found_imm = std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_IMMEDIATE_KHR);
if (Settings::values.use_vsync.GetValue()) {
if (found_mailbox != modes.end()) {
return VK_PRESENT_MODE_MAILBOX_KHR;
}
} else {
if (found_imm != modes.end()) {
return VK_PRESENT_MODE_IMMEDIATE_KHR;
}
if (found_mailbox != modes.end()) {
return VK_PRESENT_MODE_MAILBOX_KHR;
}
}
return VK_PRESENT_MODE_FIFO_KHR;
}