Files
bloodborne_pc/tests/test_ui_composition.cpp
deadinsideandClaude Opus 5.5 bf95396436 0.2: Steam Deck fixes, cheaper live scaling, TAA flicker fix, mods, English launcher
Steam Deck and weak GPUs
- Outputs other than 1080p render at the preset size again (startup patch, as in 0.1);
  live resolution changes are now a setting (live_resolution=0|1|auto, off by default).
- Texture cache on integrated GPUs: thresholds follow the driver's current memory budget.
  The old budget (~1 GB on the Deck) kept the collector in its aggressive mode, evicting
  textures used 2-3 frames ago on every submission.
- Evicted GPU-written images are written back synchronously, while their pages are still
  protected (a deferred write could land over memory the game had reused).
- run.sh uses bash builtins only (the AppImage has no sed: the game did not start on NixOS).

Rendering
- Live scaling also reduces the game's half-resolution post-processing (960x540, including
  the bloom mip chain, one proxy per level).
- TAA: history of thin surfaces missed by a jitter phase is kept when nothing moves
  (railings, window bars: static-camera flicker p99.9 -45%).
- Scene texture LOD bias log2(render/output) in G-buffer passes while upscaling.
- Present on its own thread and at most one frame of GPU run-ahead (even frame pacing).
- Pipeline cache rebuilt instead of disabled when the shader profile changes.
- GPU idle only after the draw pipeline and deferred fences are done (work_retired).
- Recompiler fixes backported from shadPS4; integer interpolation fix for pre-Turing NVIDIA.
- Sharpness up to 2.0 (an extra RCAS pass); native-resolution TAA mode.

Launcher, mods, patches
- English launcher (follows the system language), loose-file mods with load order,
  third-party shadPS4 XML patches, 60/90 FPS patches with pointer slots fixed.
- AppImage: host NVIDIA Vulkan driver support, MangoHud, no FSR 4.1.1 models
  (BB_PACKAGE_FSR411=1 bundles local ones).

Tools: route recording/replay (F9), consecutive frame dumps, scene scaling diagnostics.
Details: docs/CHANGES_2026-10-02.md, docs/CHANGES_2026-10-03.md.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-03 08:17:26 +03:00

30 lines
1.5 KiB
C++

// SPDX-License-Identifier: GPL-2.0-or-later
#include <cassert>
#include <cstdio>
#include "gpu/shadps4/video_core/renderer_vulkan/ui_composition.h"
int main() {
using namespace Vulkan::UiComposition;
// Title/loading menus have no depth/camera. UI must still go to the native target.
assert(Choose(true, true, false, true) == Background::Copy);
assert(Choose(true, true, false, false) == Background::Copy);
// In-game HUD: first reconstruct the scene, then draw the native UI over it.
assert(Choose(true, true, true, true) == Background::Temporal);
// Runtime FSR disable/failure must not change UI resolution.
assert(Choose(true, true, true, false) == Background::Copy);
assert(Choose(true, false, true, true) == Background::None);
assert(Choose(false, true, true, true) == Background::None);
assert(NativeViewport(1920, -1080));
assert(!NativeViewport(960, -540));
assert(MovieShader(0x34e8a281) && MovieShader(0x24042a9b));
assert(!MovieShader(0x0b0acf50)); // fullscreen post/tonemap also has a native viewport
assert(!MovieShader(0x6c62a79f)); // shadow geometry
const auto display = Scale(960, 540, 1920, 1080, false);
assert(display[0] == 2 && display[1] == 2);
const auto ui = Scale(960, 540, 1920, 1080, true);
assert(ui[0] == 1 && ui[1] == 1); // don't double an already native UI viewport
const auto larger = Scale(960, 540, 3840, 2160, true);
assert(larger[0] == 2 && larger[1] == 2);
std::puts("UI composition: PASS (menu without camera, HUD, FSR off, viewport scaling)");
}