diff --git a/docs/releases/v0.6.1.md b/docs/releases/v0.6.1.md index 7f2dfcca..81ed02e6 100644 --- a/docs/releases/v0.6.1.md +++ b/docs/releases/v0.6.1.md @@ -42,6 +42,8 @@ cards). - The device-lost crash at area loads on GeForce RTX cards (seen on the 4090, 5090, 5080 and 5070 Ti), most often when the system's memory ran low: a released texture could be read after it was freed. - A crash at start with code 71 when RivaTuner Statistics Server runs. +- A crash when Frame generation was switched from NVIDIA DLSS to AMD FSR 3.1 in the menu: that change now takes effect + at the next start, as the menu says. - A crash in Intel's Windows driver while the pipeline cache was saved during play. - Long sessions running out of memory: idle textures are now freed when the system's memory runs low too, not only the video memory. diff --git a/runtime/vk_fg.cpp b/runtime/vk_fg.cpp index 2915147a..1135796a 100644 --- a/runtime/vk_fg.cpp +++ b/runtime/vk_fg.cpp @@ -25,6 +25,7 @@ extern "C" { #include "platform/platform.h" #include "vk.h" #include "vk_dlaa.h" +#include "vk_dlssg.h" #include "vk_ffx.h" #include "vk_fg.h" #include "ui/menu.h" @@ -78,9 +79,12 @@ void fail(const char *what, unsigned r) { } // namespace // Follows the setting: gfx_present.c's window_settings_live remakes the swapchain when this stops matching vk_fg_active. -// It needs DLSS's or FSR 3.1's motion vectors, so it also needs one of them on. +// It needs DLSS's or FSR 3.1's motion vectors, so it also needs one of them on. Not on a device made through +// Streamline's proxies (NVIDIA's frame generation set at the start, vk_dlssg_dpa): AMD's swapchain there crashed in +// NVIDIA's driver when the menu switched from NVIDIA's frame generation to AMD's. That switch waits for a restart, +// as the menu says (menu.cpp row_framegen). extern "C" int vk_fg_wanted(void) { - return !strcmp(cfg_value("NX2NAVI_FRAMEGEN"), "fsr3") && cfg_bool("NX2NAVI_DLAA") && vk_dlaa_wanted(); + return !strcmp(cfg_value("NX2NAVI_FRAMEGEN"), "fsr3") && cfg_bool("NX2NAVI_DLAA") && vk_dlaa_wanted() && !vk_dlssg_dpa(); } // Always the three queues: the setting can be switched on during a run, and idle queues cost nothing.