Files
LanternEngine/engine/tests/test_upscaler_support.cpp

81 lines
3.1 KiB
C++

// SPDX-License-Identifier: GPL-2.0-or-later
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <initializer_list>
#include <unistd.h>
#include "bbport_settings.h"
int main() {
using namespace BbSettings;
char path[] = "/tmp/bbport-upscaler-test-XXXXXX";
const int fd = mkstemp(path);
assert(fd >= 0);
close(fd);
setenv("BB_CONFIG", path, 1);
unsetenv("BB_UPSCALER");
unsetenv("BB_UPSCALE_PRESET");
unsetenv("BB_RENDER_RES");
auto& s = Get();
s.upscaler = UpscalerTaa;
s.preset = Performance;
assert(RenderPreset() == NativeAA && s.preset == Performance);
Save();
s.upscaler = UpscalerOff;
Load();
assert(s.upscaler == UpscalerTaa && s.preset == Performance);
assert(RenderPreset() == NativeAA && !ResolutionNeedsRestart());
s.upscaler = UpscalerFsr3;
assert(RenderPreset() == Performance);
for (bool fsr4 : {false, true}) {
for (bool fsr411 : {false, true}) {
for (int requested = 0; requested < UpscalerCount; ++requested) {
FILE* config = std::fopen(path, "w");
assert(config);
std::fprintf(config, "upscaler=%s\npreset=3\noutput_res=2560x1440\n",
UpscalerName(requested));
std::fclose(config);
s.fsr4_problem = nullptr;
Load();
assert(s.upscaler == requested);
ConfigureUpscalerSupport(fsr4, fsr411);
const bool unsupported = (requested == UpscalerFsr4 && !fsr4) ||
(requested == UpscalerFsr411 && !(fsr4 && fsr411));
assert(s.upscaler == (unsupported ? UpscalerFsr3 : requested));
assert(s.fsr4_supported == fsr4);
assert(s.fsr411_supported == (fsr4 && fsr411));
assert(bool(s.fsr4_problem.load()) == unsupported);
assert(s.preset == Performance && s.output_res == 2);
assert(s.startup_upscaler == requested);
ConfigureUpscalerSupport(fsr4, fsr411);
assert(s.upscaler == (unsupported ? UpscalerFsr3 : requested));
}
}
}
s.startup_preset = Quality;
s.startup_upscaler = UpscalerFsr3;
s.upscaler = UpscalerFsr3;
s.preset = Performance;
assert(RenderPreset() == Performance && !ResolutionNeedsRestart());
setenv("BB_RENDER_RES", "1706x960", 1);
assert(RenderPreset() == Quality && ResolutionNeedsRestart());
s.preset = Quality;
assert(!ResolutionNeedsRestart());
s.upscaler = UpscalerOff;
assert(ResolutionNeedsRestart());
s.upscaler = UpscalerFsr4;
assert(!ResolutionNeedsRestart());
s.upscaler = UpscalerTaa;
assert(ResolutionNeedsRestart());
s.upscaler = UpscalerFsr4;
const int output = s.startup_output_res;
s.output_res = (output + 1) % OutputCount;
assert(ResolutionNeedsRestart());
s.output_res = output;
setenv("BB_RENDER_RES", "", 1);
assert(!FixedRenderSession() && !ResolutionNeedsRestart());
unsetenv("BB_RENDER_RES");
std::remove(path);
std::puts("Upscaler support: saved choices and FSR 3.1 fallback PASS");
}