Skip to content

ci: run the Vulkan game tests with synchronization validation - #3457

Merged
xen2 merged 1 commit into
stride3d:masterfrom
LazyWorksZA:ci/vulkan-sync-validation
Sep 21, 2026
Merged

xen2 merged 1 commit into
stride3d:masterfrom
LazyWorksZA:ci/vulkan-sync-validation

Conversation

@sasvdw

@sasvdw sasvdw commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

PR Details

Follow-up to #3324, which adds the STRIDE_VULKAN_SYNC_VALIDATION=1 switch. This sets it on the Vulkan leg of test-windows-game.yml, so a missing barrier fails the test instead of passing silently.

No new matrix leg and no callback change. GameTestBase.RunGameTest already collects every DebugLogModule error during a run and fails the test with them; synchronization hazards arrive at error severity. The switch is inert until #3324 merges, and it is inert on the Direct3D legs.

Every suite in build\Stride.Tests.Game.GPU.slnf was run on Vulkan (Lavapipe, Debug) with the switch on the #3324 head: Stride.Graphics.Tests, Stride.Graphics.Tests.10_0, Stride.Graphics.Tests.11_0, Stride.Engine.Tests, Stride.Physics.Tests and Stride.UI.Tests all pass with no hazard reported. Without #3324's access-mask fix, TestHammersley and TestRadiancePrefilteringGgxFaceContinuity fail on READ_AFTER_WRITE at vkCmdBeginRendering, which is the failure this leg exists to catch.

Related Issue

Follow-up to #3324.

Types of changes

  • Docs change / refactoring / dependency upgrade
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • My change requires a change to the documentation.
  • I have added tests to cover my changes.
  • All new and existing tests passed.
  • I have built and run the editor to try this change out.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VHYKv129fEUp6sxMbybZWf

Synchronization validation reports a missing barrier as a validation error, which
GameTestBase turns into a test failure. Core validation does not report those.
Every suite in the GPU solution filter passes under the switch with no hazard.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHYKv129fEUp6sxMbybZWf
@xen2
xen2 merged commit 89ebaf7 into stride3d:master Sep 21, 2026
26 checks passed
@xen2

xen2 commented Sep 21, 2026

Copy link
Copy Markdown
Member

Tested on my fork (this commit on top of current master, which has #3324):

I also ran a canary to confirm the switch is really active on CI and adds coverage. I removed the two attachment read bits in BarrierMapping.ToVkAccessFlags and ran TestRadiancePrefilteringGgxFaceContinuity:

So core validation alone does not catch it, and this change does. Note the checks on this PR skipped all test jobs (workflow-only change), so the runs above are the actual test. Good to merge.

Follow-up: I also tried the switch on the sample lanes (test-enduser). It found two real barrier bugs around the read-only depth buffer that no unit test reaches (a storeOp on a read-only depth, and DepthStencilRead not covering the shader read used by soft particles).
Both are fixed and green on my fork, and I will open a separate PR for the fixes plus the switch on the samples and maybe editor as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants