mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-15 23:40:29 +02:00
The core no longer sleeps to pace itself: the frontend runs retro_run at its own rate, so the frame throttle, the idle-vblank delay and the real clock sync event (and its core option) are gone, and a stepping CPU hands straight back instead of waiting 2 ms. Waits that polled now park on a lock-free eventcount through Common/Thread/ParkingLot and are woken by whoever changes the state: a paused GL emu thread, which also queues a marker behind its last frame so pausing runs the render queue up to it instead of polling; async I/O results; the software renderer when its queue is full; Vulkan pipeline compiles; and debugger requests once stepping ends. Boot joins the loader thread, cache shutdown joins its read-ahead thread, and the slow-I/O simulation is removed. The path browser, the HTTP and WebSocket servers, the Windows console and the game info cache are left out of the core build. libretro/test gains lrgltest, which drives the GL backend on a surfaceless EGL context through every path that pauses or stops the emu thread; run.sh and the image checks CI job run it on llvmpipe.
39 lines
1.7 KiB
Bash
Executable File
39 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Image, codec and boot checks for the core. Run from the repo root after
|
|
# "make -C libretro test-tools". Needs what make_vectors.py needs.
|
|
set -e
|
|
here=$(cd "$(dirname "$0")" && pwd)
|
|
root=$(cd "$here/../.." && pwd)
|
|
data=${1:-$(mktemp -d)}
|
|
python3 "$here/make_vectors.py" "$data" "$root/pspautotests/tests/cpu/cpu_alu/cpu_alu.prx"
|
|
|
|
"$here/codectest" "$data"
|
|
for img in test.iso test.cso test16k.cso test.chd test_zstd.chd test_zlib.chd test_lzma.chd test_huff.chd test_big.chd stored.zip deflated.zip; do
|
|
"$here/blocktest" "$data/test.iso" "$data/$img"
|
|
done
|
|
|
|
# Every container boots to the same exit, frames and output as the ISO.
|
|
sys=$(mktemp -d)
|
|
mkdir -p "$sys/PPSSPP"
|
|
cp -r "$root/assets/." "$sys/PPSSPP/"
|
|
ref=
|
|
for img in test.iso test.cso test.chd test_zstd.chd stored.zip deflated.zip; do
|
|
save=$(mktemp -d)
|
|
line=$(LRTEST_SYSTEM=$sys LRTEST_SAVE=$save "$here/lrtest" "$root/libretro/ppsspp_libretro.so" "$data/$img" 600 | grep '^@@' | sed -E 's/ dupe=[0-9]+//')
|
|
rm -rf "$save"
|
|
echo "$img $line"
|
|
case "$line" in *exit=1*) ;; *) echo "FAIL: $img did not run to its exit"; exit 1;; esac
|
|
[ -z "$ref" ] && ref=$line
|
|
[ "$line" = "$ref" ] || { echo "FAIL: $img differs from test.iso"; exit 1; }
|
|
done
|
|
# The GL backend runs the emulator on a thread of its own. Drive it through every
|
|
# path that pauses or stops that thread; Mesa's llvmpipe is enough.
|
|
mkdir -p "$data/gl"
|
|
unzip -o -q "$root/frametests/dumps/Depth/15826 hot pixel ULUS10298.zip" -d "$data/gl"
|
|
save=$(mktemp -d)
|
|
LRTEST_SYSTEM=$sys LRTEST_SAVE=$save timeout -k 5 300 "$here/lrgltest" "$root/libretro/ppsspp_libretro.so" "$data/gl/15826 hot pixel ULUS10298.ppdmp" 300 \
|
|
|| { echo "FAIL: GL backend run"; exit 1; }
|
|
rm -rf "$save"
|
|
|
|
echo "All image and codec checks passed."
|