a73x

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)"