#!/usr/bin/env bash # Builds and runs the tests (OVRAS_BUILD_TESTS) in a Debian container with # both render backends, Vulkan with the Khronos validation layers. Fails on any # validation message. Adapted from the vrdashboard template. # # build_scripts/steamframe/container-test.sh GPU via /dev/dri if # available, else software # VK_DRIVER=lvp build_scripts/steamframe/container-test.sh # force lavapipe (software) set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(cd "$here/../.." && pwd)" engine="${CONTAINER_ENGINE:-$(command -v podman || command -v docker)}" "$engine" build -q -t ovras-steamframe-native -f "$here/native.Dockerfile" "$here" >/dev/null "$engine" build -q -t ovras-steamframe-test -f "$here/test.Dockerfile" "$here" >/dev/null run=("$engine" run --rm -v "$root:$root:z" -w "$root" -e HOME=/tmp -e "VK_DRIVER=${VK_DRIVER:-}") if [[ "$(basename "$engine")" == docker ]]; then run+=(--user "$(id -u):$(id -g)") else run+=(--userns=keep-id) fi [[ -e /dev/dri/renderD128 ]] && run+=(--device /dev/dri/renderD128) "${run[@]}" ovras-steamframe-test bash -c ' set -e build=build/steamframe-test cmake -S . -B $build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DOVRAS_BUILD_TESTS=ON >/dev/null cmake --build $build --target tst_render if [[ -n "$VK_DRIVER" ]]; then export VK_DRIVER_FILES=/usr/share/vulkan/icd.d/${VK_DRIVER}_icd.json; fi vulkaninfo --summary 2>/dev/null | grep -m1 deviceName || true Xvfb :99 >/dev/null 2>&1 & sleep 1 export DISPLAY=:99 OVRAS_VULKAN_VALIDATION=1 ctest --test-dir $build --output-on-failure -V > $build/ctest.log 2>&1 \ || { tail -40 $build/ctest.log; exit 1; } grep -E "tests passed|Test +#|Totals" $build/ctest.log # A skipped test (no GPU context) must not count as passed. if grep -q "SKIP" $build/ctest.log; then echo "Tests were skipped (see $build/ctest.log)"; exit 1 fi messages=$(grep -oE "(VUID|UNASSIGNED)-[A-Za-z0-9_.-]+" $build/ctest.log | sort | uniq -c || true) if [[ -n "$messages" ]]; then echo "Vulkan validation messages (see $build/ctest.log):" echo "$messages" exit 1 fi echo "No Vulkan validation messages." '