Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6b92be8
test: add SRV view with FirstElement offset test
koubaa Apr 11, 2026
9d921aa
test: add multi-dispatch SRV view stress test
koubaa Apr 11, 2026
c1afef6
style: fix rustfmt formatting in SRV stress test
koubaa Apr 11, 2026
a6672b7
fix: rewrite SRV stress test with correct expectations
koubaa Apr 11, 2026
2210d88
test: rewrite SRV stress test to mirror Ekrano pool pattern
koubaa Apr 11, 2026
947f963
test: replicate Ekrano's pipeline pattern for WARP SRV reproducer
koubaa Apr 11, 2026
0b3def8
test: UAV-fill then SRV-read pattern for WARP reproducer
koubaa Apr 12, 2026
b9fc15c
test: add varying-stride pool test matching Ekrano's actual strides
koubaa Apr 12, 2026
75a5c90
test: add indirect dispatch to WARP pipeline reproducer
koubaa Apr 12, 2026
53e207c
ci: filter WARP tests to reproducer-only for faster iteration
koubaa Apr 12, 2026
e171c7f
test: combined WARP SRV reproducer with all Ekrano factors
koubaa Apr 12, 2026
a88e898
test: add textures + multi-frame pool reuse to WARP reproducer
koubaa Apr 12, 2026
aba321e
test: fix Metal CI + add 20 churn stages to WARP reproducer
koubaa Apr 12, 2026
baf3392
test: fix stride mismatch in churn dispatches, add scratch views
koubaa Apr 12, 2026
c3fe477
test: skip WARP reproducer on macOS, add scratch views
koubaa Apr 12, 2026
0222f5b
test: add standalone-buffer SRV test + massive heap pressure
koubaa Apr 13, 2026
3240bfe
test: add mixed-stride dispatches (stride-8 SRV + stride-4 UAV)
koubaa Apr 13, 2026
cae1d11
test: add clip_reduce-like shader with groupshared + mixed strides
koubaa Apr 13, 2026
c76f49b
test: full Ekrano pipeline replica with 10x iteration loop
koubaa Apr 13, 2026
6d82924
Use real Ekrano shaders in WARP SRV reproducer
koubaa Apr 13, 2026
a4ae64f
Match Ekrano's WARP runtime: frame lifecycle + descriptor churn
koubaa Apr 13, 2026
b67d659
Add pooled variant: real Ekrano shaders + BufferPool views
koubaa Apr 13, 2026
0a4aacf
CI: add --nocapture to see stderr from WARP crash
koubaa Apr 13, 2026
46aa765
CI: run each test separately to isolate WARP crash
koubaa Apr 13, 2026
4a905f8
Reproduce WARP crash: descriptor heap pollution + real shaders
koubaa Apr 13, 2026
33e4507
Add 4-level minimal WARP SRV reproducer + fix pollution stride alignment
koubaa Apr 13, 2026
97f0525
CI: add cumulative test runs (no pollution, all tests together)
koubaa Apr 13, 2026
72401da
CI: run each WARP test 20x to catch non-deterministic crash
koubaa Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 89 additions & 68 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,58 +90,42 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Install Vulkan dependencies (Mesa 25.0+ for Vulkan 1.4)
- name: Install Vulkan dependencies
run: |
# Upgrade Mesa to get Vulkan 1.4 support in lavapipe
sudo apt-get update
sudo apt-get upgrade -y mesa-vulkan-drivers libgl1-mesa-dri
sudo apt-get install -y \
libvulkan1 \
libvulkan-dev \
vulkan-tools \
mesa-vulkan-drivers \
libxcb1-dev \
libxcb-render0-dev \
libxcb-shape0-dev \
libxcb-xfixes0-dev \
libxkbcommon-dev

# Patched lavapipe: https://gitlab.freedesktop.org/mesa/mesa/-/work_items/15227
# Remove this step and restore mesa-vulkan-drivers from apt once the upstream fix lands.
- name: Install patched lavapipe from mesa-fork
run: |
MESA_DIR="/opt/mesa-fork"
sudo mkdir -p "$MESA_DIR"
curl -sL https://github.com/koubaa/mesa-fork/releases/download/v1/lavapipe-fix.tar.gz \
| sudo tar xz -C "$MESA_DIR"
echo "LAVAPIPE_ICD=$MESA_DIR/lvp_icd.x86_64.json" >> $GITHUB_ENV
VK_ICD_FILENAMES="$MESA_DIR/lvp_icd.x86_64.json" vulkaninfo --summary || echo "vulkaninfo failed, continuing anyway"

- name: Download Slang compiler
run: |
cd slang
chmod +x download.sh
./download.sh
# Set environment variable for Slang library path (must be full path to .so file)
SLANG_DIR="$(pwd)/bin/linux-x86_64"
SLANG_LIB="$SLANG_DIR/libslang.so"
echo "GOLDY_SLANG_PATH=$SLANG_LIB" >> $GITHUB_ENV
echo "SLANG_LIB_DIR=$SLANG_DIR" >> $GITHUB_ENV
echo "Slang libraries:"
ls -la "$SLANG_DIR" || echo "Directory not found"

- name: Verify lavapipe installation
run: |
# Find lavapipe ICD
LAVAPIPE_ICD=$(find /usr -name "lvp_icd*.json" 2>/dev/null | head -1)
if [ -z "$LAVAPIPE_ICD" ]; then
echo "Lavapipe ICD not found, searching..."
find /usr -name "*lvp*" -o -name "*lavapipe*" 2>/dev/null || true
# Try common locations
for path in /usr/share/vulkan/icd.d/lvp_icd.x86_64.json \
/usr/share/vulkan/icd.d/lvp_icd.json; do
if [ -f "$path" ]; then
LAVAPIPE_ICD="$path"
break
fi
done
fi

echo "Using Lavapipe ICD: $LAVAPIPE_ICD"
echo "LAVAPIPE_ICD=$LAVAPIPE_ICD" >> $GITHUB_ENV

# Verify Vulkan works with lavapipe
VK_ICD_FILENAMES="$LAVAPIPE_ICD" vulkaninfo --summary || echo "vulkaninfo failed, continuing anyway"

- name: Cache cargo
uses: actions/cache@v5
with:
Expand Down Expand Up @@ -329,12 +313,65 @@ jobs:
Write-Host "WARNING: dxcompiler.dll not found in Windows SDK"
}

- name: Run tests (DX12 + WARP)
- name: "Full pipeline x20 (with pollution)"
env:
GOLDY_BACKEND: dx12
GOLDY_DX12_ALLOW_WARP: "1"
GOLDY_DX12_NO_DEBUG: "1"
WARP_POLLUTION: "50"
shell: bash
run: |
for i in $(seq 1 20); do
echo "=== Run $i/20 ==="
cargo test --features dx12 --test compute_integration -- test_warp_srv_full_pipeline --exact --nocapture || { echo "FAILED on run $i"; exit 1; }
done
echo "All 20 runs passed"
continue-on-error: true

- name: "Full pipeline POOLED x20 (with pollution)"
env:
GOLDY_BACKEND: dx12
GOLDY_DX12_ALLOW_WARP: "1"
GOLDY_DX12_NO_DEBUG: "1"
WARP_POLLUTION: "50"
shell: bash
run: |
for i in $(seq 1 20); do
echo "=== Run $i/20 ==="
cargo test --features dx12 --test compute_integration -- test_warp_srv_full_pipeline_pooled --exact --nocapture || { echo "FAILED on run $i"; exit 1; }
done
echo "All 20 runs passed"
continue-on-error: true

- name: "All test_warp_srv together x20 (no pollution)"
env:
GOLDY_BACKEND: dx12
GOLDY_DX12_ALLOW_WARP: "1"
GOLDY_DX12_NO_DEBUG: "1"
WARP_POLLUTION: "0"
shell: bash
run: |
for i in $(seq 1 20); do
echo "=== Run $i/20 ==="
cargo test --features dx12 --test compute_integration -- test_warp_srv --nocapture || { echo "FAILED on run $i"; exit 1; }
done
echo "All 20 runs passed"
continue-on-error: true

- name: "All test_warp_repro levels together x20 (with pollution)"
env:
GOLDY_BACKEND: dx12
GOLDY_DX12_ALLOW_WARP: "1"
GOLDY_DX12_NO_DEBUG: "1"
run: cargo test --features dx12
WARP_POLLUTION: "50"
shell: bash
run: |
for i in $(seq 1 20); do
echo "=== Run $i/20 ==="
cargo test --features dx12 --test compute_integration -- test_warp_repro --nocapture || { echo "FAILED on run $i"; exit 1; }
done
echo "All 20 runs passed"
continue-on-error: true

# Python bindings build and test (Linux with lavapipe)
python-linux:
Expand All @@ -352,42 +389,34 @@ jobs:
with:
python-version: '3.12'

- name: Install Vulkan dependencies (Mesa 25.0+ for Vulkan 1.4)
- name: Install Vulkan dependencies
run: |
# Upgrade Mesa to get Vulkan 1.4 support in lavapipe
sudo apt-get update
sudo apt-get upgrade -y mesa-vulkan-drivers libgl1-mesa-dri
sudo apt-get install -y \
libvulkan1 \
libvulkan-dev \
vulkan-tools \
mesa-vulkan-drivers \
libxcb1-dev \
libxcb-render0-dev \
libxcb-shape0-dev \
libxcb-xfixes0-dev \
libxkbcommon-dev

# Patched lavapipe: https://gitlab.freedesktop.org/mesa/mesa/-/work_items/15227
- name: Install patched lavapipe from mesa-fork
run: |
MESA_DIR="/opt/mesa-fork"
sudo mkdir -p "$MESA_DIR"
curl -sL https://github.com/koubaa/mesa-fork/releases/download/v1/lavapipe-fix.tar.gz \
| sudo tar xz -C "$MESA_DIR"
echo "LAVAPIPE_ICD=$MESA_DIR/lvp_icd.x86_64.json" >> $GITHUB_ENV
VK_ICD_FILENAMES="$MESA_DIR/lvp_icd.x86_64.json" vulkaninfo --summary || true

- name: Download and bundle Slang
run: |
cd slang && chmod +x download.sh && ./download.sh
cd ../python && python build-slang.py

- name: Verify lavapipe installation
run: |
LAVAPIPE_ICD=$(find /usr -name "lvp_icd*.json" 2>/dev/null | head -1)
if [ -z "$LAVAPIPE_ICD" ]; then
for path in /usr/share/vulkan/icd.d/lvp_icd.x86_64.json \
/usr/share/vulkan/icd.d/lvp_icd.json; do
if [ -f "$path" ]; then
LAVAPIPE_ICD="$path"
break
fi
done
fi
echo "LAVAPIPE_ICD=$LAVAPIPE_ICD" >> $GITHUB_ENV
VK_ICD_FILENAMES="$LAVAPIPE_ICD" vulkaninfo --summary || true

- name: Cache cargo
uses: actions/cache@v5
with:
Expand Down Expand Up @@ -532,42 +561,34 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Install build dependencies (Mesa 25.0+ for Vulkan 1.4)
- name: Install build dependencies
run: |
# Upgrade Mesa to get Vulkan 1.4 support in lavapipe
sudo apt-get update
sudo apt-get upgrade -y mesa-vulkan-drivers libgl1-mesa-dri
sudo apt-get install -y \
cmake \
ninja-build \
libvulkan1 \
libvulkan-dev \
vulkan-tools \
mesa-vulkan-drivers \
libxcb1-dev \
libxcb-render0-dev \
libxcb-shape0-dev \
libxcb-xfixes0-dev \
libxkbcommon-dev

# Patched lavapipe: https://gitlab.freedesktop.org/mesa/mesa/-/work_items/15227
- name: Install patched lavapipe from mesa-fork
run: |
MESA_DIR="/opt/mesa-fork"
sudo mkdir -p "$MESA_DIR"
curl -sL https://github.com/koubaa/mesa-fork/releases/download/v1/lavapipe-fix.tar.gz \
| sudo tar xz -C "$MESA_DIR"
echo "LAVAPIPE_ICD=$MESA_DIR/lvp_icd.x86_64.json" >> $GITHUB_ENV
VK_ICD_FILENAMES="$MESA_DIR/lvp_icd.x86_64.json" vulkaninfo --summary || true

- name: Download Slang
run: cd slang && chmod +x download.sh && ./download.sh

- name: Verify lavapipe installation
run: |
LAVAPIPE_ICD=$(find /usr -name "lvp_icd*.json" 2>/dev/null | head -1)
if [ -z "$LAVAPIPE_ICD" ]; then
for path in /usr/share/vulkan/icd.d/lvp_icd.x86_64.json \
/usr/share/vulkan/icd.d/lvp_icd.json; do
if [ -f "$path" ]; then
LAVAPIPE_ICD="$path"
break
fi
done
fi
echo "LAVAPIPE_ICD=$LAVAPIPE_ICD" >> $GITHUB_ENV
VK_ICD_FILENAMES="$LAVAPIPE_ICD" vulkaninfo --summary || true

- name: Cache cargo
uses: actions/cache@v5
with:
Expand Down
Loading
Loading