43 lines
1.7 KiB
Bash
Executable file
43 lines
1.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#SPDX-License-Identifier: MIT
|
|
#SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
|
|
|
# Repeated-measurement harness for SponzaBench. Runs the binary in $BINDIR
|
|
# REPS times for a given mesh cap and reports the median (and min/max) of
|
|
# each BENCH metric. Validation is force-disabled via the loader (it adds
|
|
# huge, version-dependent overhead) and present mode is uncapped so frame
|
|
# time reflects real work rather than the compositor's vblank.
|
|
#
|
|
# Usage: run-bench.sh <bindir> <label> <meshes> <reps> [--cold]
|
|
# --cold deletes pipeline_cache.bin before EACH run (cold-compile path).
|
|
set -u
|
|
BINDIR="$1"; LABEL="$2"; MESHES="$3"; REPS="$4"; COLD="${5:-}"
|
|
cd "$BINDIR" || exit 1
|
|
|
|
declare -A vals
|
|
metrics="setup_ms fps frame_mean_ms frame_p50_ms frame_p99_ms peak_rss_kb"
|
|
for m in $metrics; do vals[$m]=""; done
|
|
|
|
for ((i=0;i<REPS;i++)); do
|
|
[ "$COLD" = "--cold" ] && rm -f pipeline_cache.bin
|
|
out=$(VK_LOADER_LAYERS_DISABLE='~all~' CRAFTER_PRESENT_IMMEDIATE=1 \
|
|
BENCH_WARMUP=200 BENCH_FRAMES=2000 BENCH_MESHES="$MESHES" \
|
|
./SponzaBench 2>/dev/null)
|
|
for m in $metrics; do
|
|
v=$(echo "$out" | awk -v k="$m" '$1=="BENCH" && $2==k {print $3}')
|
|
vals[$m]="${vals[$m]} $v"
|
|
done
|
|
done
|
|
|
|
med() { tr ' ' '\n' | grep -v '^$' | sort -n | awk '{a[NR]=$1} END{print a[int((NR+1)/2)]}'; }
|
|
lo() { tr ' ' '\n' | grep -v '^$' | sort -n | head -1; }
|
|
hi() { tr ' ' '\n' | grep -v '^$' | sort -n | tail -1; }
|
|
|
|
echo "## $LABEL (meshes=$MESHES reps=$REPS ${COLD})"
|
|
printf "%-15s %12s %12s %12s\n" metric median min max
|
|
for m in $metrics; do
|
|
echo -n "$(printf '%-15s' "$m") "
|
|
printf "%12s %12s %12s\n" \
|
|
"$(echo "${vals[$m]}" | med)" "$(echo "${vals[$m]}" | lo)" "$(echo "${vals[$m]}" | hi)"
|
|
done
|
|
echo
|