mirror of
https://github.com/Awakenchan/LanternEngine.git
synced 2026-11-10 01:11:45 -10:00
71 lines
4.0 KiB
C++
71 lines
4.0 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;
|
|
assert(Choose(true, true, false, true) == Background::Copy);
|
|
assert(Choose(true, true, false, false) == Background::Copy);
|
|
assert(Choose(true, true, true, true) == Background::Temporal);
|
|
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));
|
|
constexpr std::array<float, 2> ui4k{3840.0f, 2160.0f};
|
|
assert(WidenedUiViewport(3840, -2160, ui4k));
|
|
assert(!WidenedUiViewport(1920, -1080, ui4k));
|
|
assert(!WidenedUiViewport(1920, -1080));
|
|
assert(SceneHasUiViewportSize(1916, 1076, ui4k) && !SceneNearUiSize(1916, 1076, ui4k));
|
|
assert(SceneNearUiSize(3840, 2160, ui4k));
|
|
assert(MovieShader(0x34e8a281) && MovieShader(0x24042a9b));
|
|
assert(!MovieShader(0x0b0acf50));
|
|
assert(!MovieShader(0x6c62a79f));
|
|
assert(ObserveDraw(0, 0xa400228b, true));
|
|
assert(ObserveDraw(0, 0x34e8a281, true));
|
|
assert(ObserveDraw(1, 0x44072322, true));
|
|
assert(!ObserveDraw(0, 0x6c62a79f, true));
|
|
assert(!ObserveDraw(0, 0xa400228b, false));
|
|
assert(!ObserveDraw(3, 0xa400228b, true));
|
|
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);
|
|
const auto larger = Scale(960, 540, 3840, 2160, true);
|
|
assert(larger[0] == 2 && larger[1] == 2);
|
|
for(auto size: {std::array<uint32_t,2>{1920,1080},{2560,1440},{3840,2160},{3440,1440},{5120,1440}}) {
|
|
auto f=Fit(size[0],size[1]);
|
|
assert(f.scale[0]==f.scale[1]);
|
|
assert(f.offset[0]>=0 && f.offset[1]>=0);
|
|
assert(std::abs(1920*f.scale[0]+2*f.offset[0]-size[0])<.01f);
|
|
assert(std::abs(1080*f.scale[1]+2*f.offset[1]-size[1])<.01f);
|
|
}
|
|
assert(Fit(1920,1080).offset==(std::array<float,2>{0,0}));
|
|
assert(std::abs(Fit(3440,1440).offset[0]-440)<.01f);
|
|
assert(std::abs(Fit(5120,1440).offset[0]-1280)<.01f);
|
|
const auto wide = ParseUiSize("2520x1080");
|
|
assert(wide[0] == 2520 && wide[1] == 1080);
|
|
assert(ParseUiSize(nullptr)[0] == 1920 && ParseUiSize("800x600")[0] == 1920 && ParseUiSize("junk")[1] == 1080);
|
|
assert(NativeViewport(2520, -1080, wide) && NativeViewport(1920, 1080, wide) && !NativeViewport(2560, 1080, wide));
|
|
const auto w = Fit(3360, 1440, wide);
|
|
assert(w.scale[0] == w.scale[1] && std::abs(w.offset[0]) < .01f && std::abs(w.offset[1]) < .01f);
|
|
assert(std::abs((300 * w.scale[0] + w.offset[0]) - Fit(3360, 1440).offset[0]) < .01f);
|
|
const auto t = Fit(1920, 1200, ParseUiSize("1920x1200"));
|
|
assert(t.scale[0] == 1 && t.offset[1] == 0);
|
|
const auto sharp = ParseUiSize("3840x2160");
|
|
assert(TargetViewport(1916, -1076, 1920, 1080) && TargetViewport(1708, 960, 1712, 960));
|
|
assert(!TargetViewport(128, 128, 1920, 1080));
|
|
assert(InnerViewport(128, -128, 1920, 1080, sharp) && InnerViewport(2560, 1440, 1712, 960, sharp));
|
|
assert(!InnerViewport(3840, 2160, 1920, 1080, sharp) && !InnerViewport(1920, 1080, 1920, 1080, sharp));
|
|
assert(!InnerViewport(1916, 1076, 1920, 1080, sharp) && !InnerViewport(4096, 2160, 1920, 1080, sharp));
|
|
assert(!InnerViewport(0, 0, 1920, 1080, sharp));
|
|
assert(SceneHasUiViewportSize(2560, 1440, ParseUiSize("2560x1440")));
|
|
assert(SceneHasUiViewportSize(1920, 1080, sharp) && SceneHasUiViewportSize(1924, 1084, sharp));
|
|
assert(!SceneHasUiViewportSize(1708, 960, ParseUiSize("2560x1440")));
|
|
assert(!SceneHasUiViewportSize(2560, 1440, ParseUiSize(nullptr)));
|
|
assert(!SceneHasUiViewportSize(2296, 960, ParseUiSize("3360x1440")));
|
|
assert(!SceneHasUiViewportSize(3440, 1440, ParseUiSize("3360x1440")));
|
|
std::puts("UI composition: PASS (menu without camera, HUD, FSR off, viewport scaling)");
|
|
}
|