tests/check_unbounded_vk.sh
Ref: Size: 1.6 KiB
#!/usr/bin/env bash
# Grep gate: fail if any source file outside src/vk_sync.zig calls
# Vulkan blocking primitives directly. All such calls must go through
# src/vk_sync.zig helpers (waitFenceBounded, acquireImageBounded,
# waitIdleForShutdown, etc.).
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$REPO_ROOT"
# UPDATE THIS LIST when adding new blocking Vulkan primitives to vk_sync.zig
# (e.g. vkd.waitSemaphores would need a corresponding bounded wrapper + entry).
PATTERNS=(
'vkd\.waitForFences'
'vkd\.acquireNextImageKHR'
'vkd\.deviceWaitIdle'
'vkd\.queueWaitIdle'
)
# Find all .zig files in src/ except vk_sync.zig
mapfile -t files < <(find src -name '*.zig' ! -path 'src/vk_sync.zig' | sort)
violations=0
violation_lines=()
for file in "${files[@]}"; do
for pat in "${PATTERNS[@]}"; do
while IFS= read -r hit; do
violation_lines+=("$file:$hit")
violations=$((violations + 1))
done < <(grep -nE "$pat" "$file" || true)
done
done
if [[ $violations -gt 0 ]]; then
echo "ERROR: $violations unbounded Vulkan wait call(s) found outside src/vk_sync.zig:" >&2
for line in "${violation_lines[@]}"; do
echo " $line" >&2
done
echo "" >&2
echo "Use src/vk_sync.zig helpers instead:" >&2
echo " waitFenceBounded — replace vkd.waitForFences" >&2
echo " acquireImageBounded — replace vkd.acquireNextImageKHR" >&2
echo " waitIdleForShutdown — replace vkd.deviceWaitIdle / queueWaitIdle" >&2
exit 1
fi
echo "vk grep gate: ok (${#files[@]} files, no violations)"