Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
1272b7c
chore: update LLVM/clang to 22.1.2
xen2 Apr 1, 2026
8da3cde
ci: added base for testing different graphics API
xen2 Apr 1, 2026
68fe9af
ci: enable D3D12 WARP testing, skip broken D3D12 tests
xen2 Apr 1, 2026
83a56b5
fix: Test: finish or discard RenderDoc capture before GraphicsDevice …
xen2 Apr 2, 2026
bef6968
fix: Vulkan: backbuffer format tries to respect desired format with R…
xen2 Apr 2, 2026
8bdc676
feat: Added SwiftShader support for Vulkan testing
xen2 Apr 2, 2026
cae5f7c
fix: Disable NextGenTest1 (causing crash on various platforms)
xen2 Apr 2, 2026
8800a2b
feat: Simplified RenderDoc env variables
xen2 Apr 2, 2026
e4dbdb4
test: added image-based unit tests for Vulkan
xen2 Apr 2, 2026
d404d22
fix: TestFixedSizeUI was calling LoadContent twice
xen2 Apr 2, 2026
cd3b8a7
fix: Protect from F16 rounding issues during RangeDecompressorShader …
xen2 Apr 2, 2026
c2a01ca
fix: Texture.IsInitialized need to share state with parent texture (f…
xen2 Apr 2, 2026
08486b8
feat: Vulkan support for ClearReadWrite (fixes TestTexture2DUnordered…
xen2 Apr 2, 2026
1e8d7d6
fix: D3D12 Initialize all sampler slots with LinearClamp as a default…
xen2 Apr 2, 2026
4c87e9b
fix: D3D12 staging texture creation with initial data and default sam…
xen2 Apr 3, 2026
59e92da
fix: Vulkan surface extensions optional for headless, validate timeli…
xen2 Apr 3, 2026
be1eae9
fix: add STRIDE_MAX_PARALLELISM env var for deterministic rendering, …
xen2 Apr 3, 2026
9dad722
fix: request Vulkan 1.3 instead of 1.4 to match SwiftShader capability
xen2 Apr 3, 2026
fbe0182
chore: Use VK_DRIVER_FILES instead of VK_ICD_FILENAMES
xen2 Apr 3, 2026
4be55f1
test: Register SwiftShader ICD in registry on github agent (env ignor…
xen2 Apr 3, 2026
c40553b
fix: Vulkan ImageView type selection based on view layerCount instead…
xen2 Apr 3, 2026
22cca65
chore: use Debug build for unit tests
xen2 Apr 3, 2026
cae89e1
feat: added further diagnostics on D3D12 (in case of failure), and un…
xen2 Apr 3, 2026
7845da4
chore: log D3D11/D3D12/Vulkan validation warnings and errors to conso…
xen2 Apr 3, 2026
51b2634
fix: pow() is undefined for negative values, use proper multiplication
xen2 Apr 3, 2026
dd2197b
fix: don't wrap D3D11 shader reflection child interfaces in ComPtr (t…
xen2 Apr 3, 2026
b53cfc0
fix: guard PIX calls when WinPixEventRuntime.dll is not loaded and fa…
xen2 Apr 4, 2026
b7d6b75
fix: Vulkan call only vkCreateDebugUtilsMessengerEXT when extension e…
xen2 Apr 3, 2026
f445bcc
fix: Improve resource transitions for Vulkan
xen2 Apr 3, 2026
6e42162
fix: D3D12 adjust initial texture state
xen2 Apr 3, 2026
f4d91b7
fix: Vulkan PipelineState uses deferred destruction to avoid destroyi…
xen2 Apr 3, 2026
aa021cc
chore: log process memory after each test for leak detection
xen2 Apr 4, 2026
ad2b38a
ci: install Vulkan SDK on CI runner for validation layer support
xen2 Apr 6, 2026
9d711d5
fix: add missing D3D12 resource barriers for SetRenderTargets, ClearR…
xen2 Apr 3, 2026
367d02e
ci: run GPU tests one assembly at a time
xen2 Apr 3, 2026
900648a
fix: D3D12 Clear should transition without restore since SetRenderTar…
xen2 Apr 3, 2026
5c84b80
fix: D3D12 create all textures in Common state, let bind points handl…
xen2 Apr 4, 2026
20e1cd2
fix: D3D12 create DS/RT in target state, remove redundant BeginDraw b…
xen2 Apr 4, 2026
396d55b
fix: D3D12 create textures in target state and barrier to CopyDest wi…
xen2 Apr 4, 2026
a00ca71
add D3D12 descriptor set resource tracking for automatic barrier tran…
xen2 Apr 4, 2026
5dd8343
add D3D12 automatic SRV/UAV transitions before Draw/Dispatch using de…
xen2 Apr 4, 2026
b30b309
add cross-platform barrier enums: BarrierLayout, BarrierAccess, Barri…
xen2 Apr 4, 2026
3b24e9b
add TrackedLayout field to GraphicsResource for cross-platform barrie…
xen2 Apr 4, 2026
550a8be
wire TrackedLayout into D3D12 resource creation and barrier transitio…
xen2 Apr 4, 2026
2ed9b0c
wire TrackedLayout into Vulkan resource creation and barrier transiti…
xen2 Apr 4, 2026
71d1a3b
detect D3D12 Enhanced Barriers support, stub dual-path barrier flush
xen2 Apr 4, 2026
3327a8a
add ResourceBarrierTransition(BarrierLayout) overload to all backends
xen2 Apr 4, 2026
20a21bd
migrate callers from GraphicsResourceState to BarrierLayout
xen2 Apr 4, 2026
f213477
mark GraphicsResourceState as obsolete in favor of BarrierLayout
xen2 Apr 4, 2026
8b69214
refactor D3D12 barriers to use ResourceBarrierDescription internally,…
xen2 Apr 4, 2026
eef10ed
implement D3D12 Enhanced Barriers flush path with TextureBarrier/Buff…
xen2 Apr 4, 2026
12d0e2a
add per-subresource barrier tracking with lazy allocation for cubemap…
xen2 Apr 4, 2026
61bd0d3
optimize whole-resource barriers to only transition dirty subresources
xen2 Apr 4, 2026
6e75899
fix: Vulkan buffer barriers with HOST access need HOST pipeline stage
xen2 Apr 4, 2026
b165ce3
refactor Vulkan ResourceBarrierTransition to use BarrierLayout as pri…
xen2 Apr 4, 2026
6a8e4be
remove ResourceBarrierTransitionAndRestore, migrate all internal call…
xen2 Apr 4, 2026
e7c0c1e
fix: Vulkan init barriers use proper pipeline stage instead of AllCom…
xen2 Apr 4, 2026
023ada9
skip GPU-based validation on software renderers, flush debug log on C…
xen2 Apr 4, 2026
48ef9f3
fix: D3D12 barrier state mismatch on texture views (depth-stencil and…
xen2 Apr 4, 2026
477effa
fix: D3D12 coalesce duplicate barriers on same resource in FlushResou…
xen2 Apr 4, 2026
3e9391e
Merge branch 'gpu-barrier-rewrite' into feature/ci-gpu-vulkan
xen2 Apr 6, 2026
4b3dcc6
ci: add crash dump collection for all crash types (SEH, .NET unhandle…
xen2 Apr 4, 2026
83ccee9
fix: D3D12 defer temp resource release via DeferredReleaseQueue to av…
xen2 Apr 5, 2026
bb3a38d
fix: flush GPU before releasing resources during GraphicsDevice teardown
xen2 Apr 5, 2026
10e4498
fix: nudge AnimatedModelTests camera to avoid SwiftShader sub-pixel f…
xen2 Apr 5, 2026
baa7c90
fix: D3D12 create SRV textures in ShaderResource state instead of Com…
xen2 Apr 5, 2026
b5bf674
fix: D3D12 wait for copy fence before reading staging texture in Copy…
xen2 Apr 5, 2026
98b8547
fix: D3D12 skip fence Wait on value zero to avoid debug layer warning
xen2 Apr 5, 2026
103d5c0
fix: Vulkan use correct depth aspect for depth-format textures withou…
xen2 Apr 6, 2026
11f1926
fix: Vulkan use correct image view type for 1D/3D textures in render …
xen2 Apr 6, 2026
970e1bd
fix: bind shared depth texture fallback for shadow maps when atlas is…
xen2 Apr 6, 2026
1e5d39a
fix: D3D12 release descriptor heaps in CommandList.OnDestroyed to pre…
xen2 Apr 6, 2026
c36676f
fix: D3D12 track all allocated descriptor heaps in DescriptorAllocato…
xen2 Apr 6, 2026
bf8510e
test: Activate tessellation for D3D12 WARP renderer (but only 1st fra…
xen2 Apr 3, 2026
be32ab9
test: assert zero GPU validation errors after each game test
xen2 Apr 6, 2026
b729c46
ci: split test-windows into separate Simple and Game workflows, remov…
xen2 Apr 6, 2026
9b04409
ci: rename SwiftShader workflow to 'Dep: Build & Deploy SwiftShader'
xen2 Apr 6, 2026
112213e
fix: find SwiftShader ICD JSON in build output regardless of platform…
xen2 Apr 6, 2026
31ebc67
fix: use correct STRIDE_NUGET_API_KEY secret name and quote it
xen2 Apr 6, 2026
b9a26b2
ci: add NuGet package signing step before publish
xen2 Apr 6, 2026
ca3eca3
ci: remove PDB from SwiftShader NuGet package, use date-based version…
xen2 Apr 6, 2026
6ef7d96
fix: reset stale shadow map texture and use ShaderResource-only depth…
xen2 Apr 7, 2026
8ad0122
test: add [AllowGpuValidationError] attribute to suppress known Vulka…
xen2 Apr 7, 2026
479ca48
fix: Vulkan re-issue barriers across command lists in multi-CB batches
xen2 Apr 7, 2026
e10ca0d
ci: use dotnet tool for NuGet signing instead of checked-in binary
xen2 Apr 7, 2026
a46bc8e
ci: SwiftSharp dll was not copied by target file; also restore file t…
xen2 Apr 7, 2026
7acad3f
test: added RunSettings file for Visual Studio to run tests in Softwa…
xen2 Apr 7, 2026
3b2727b
test: default to software rendering, add STRIDE_TESTS_GPU opt-in
xen2 Apr 7, 2026
80cc36b
fix: suppress D3D11 debug layer warnings via InfoQueue deny list and …
xen2 Apr 7, 2026
1dcc331
Merge branch 'master' into feature/ci-gpu-vulkan
xen2 Apr 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 0 additions & 12 deletions .github/workflows/build-vs-package.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
name: Build Visual Studio Package

on:
pull_request:
paths:
- '.github/workflows/build-vs-package.yml'
- 'build/Stride.VisualStudio.sln'
- 'sources/tools/Stride.VisualStudio.*/**'
- 'sources/targets/**'
- '!**/.all-contributorsrc'
- '!**/.editorconfig'
- '!**/.gitignore'
- '!**/*.md'
- '!crowdin.yml'
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch:
inputs:
build-type:
Expand Down
18 changes: 10 additions & 8 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,16 @@ jobs:
graphics-api: ${{ matrix.graphics-api }}

### Tests ###
Windows-Tests:
Windows-Tests-Simple:
needs: Windows-Runtime
strategy:
matrix:
build-type: [Release]
test-category: [Simple, Game]
uses: ./.github/workflows/test-windows.yml
uses: ./.github/workflows/test-windows-simple.yml
secrets: inherit
with:
build-type: ${{ matrix.build-type }}
test-category: ${{ matrix.test-category }}
build-type: Debug

Windows-Tests-Game:
needs: Windows-Runtime
uses: ./.github/workflows/test-windows-game.yml
secrets: inherit
with:
build-type: Debug
71 changes: 0 additions & 71 deletions .github/workflows/test-gpu-warp.yml

This file was deleted.

175 changes: 175 additions & 0 deletions .github/workflows/test-windows-game.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
name: Test Windows (Game)

on:
workflow_dispatch:
inputs:
build-type:
description: Build
default: Debug
type: choice
options:
- Debug
- Release
graphics-api:
description: Graphics API (blank = all)
default: ''
type: choice
options:
- ''
- Direct3D11
- Direct3D12
- Vulkan
workflow_call:
inputs:
build-type:
default: Debug
type: string

concurrency:
group: test-windows-game-${{ github.event.pull_request.number || github.ref }}-${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }}
cancel-in-progress: true

jobs:
#
# Game tests - API-independent projects (run once)
#
Game-Common:
name: Game Common (${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }})
runs-on: windows-2025-vs2026
env:
STRIDE_GRAPHICS_SOFTWARE_RENDERING: "1"
STRIDE_TESTS_RENDERDOC: "error"
STRIDE_MAX_PARALLELISM: "8"
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Disable WER dialogs
run: reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v DontShowUI /t REG_DWORD /d 1 /f
- name: Build
run: |
dotnet build build\Stride.Tests.Game.slnf `
-p:StrideNativeBuildMode=Clang `
-m:1 -nr:false `
-v:m -p:WarningLevel=0 `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StridePlatforms=Windows `
-p:StrideGraphicsApis=Direct3D11
- name: Test
run: |
dotnet test build\Stride.Tests.Game.slnf `
--no-build `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }}
- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: test-artifacts-game-common
path: tests/local/
if-no-files-found: ignore

#
# Game tests - Graphics API-dependent projects (run per API)
#
Game-GraphicsApi:
name: Game ${{ matrix.graphics-api }} (${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }})
runs-on: windows-2025-vs2026
strategy:
fail-fast: false
matrix:
graphics-api: ${{ github.event.inputs.graphics-api != '' && fromJson(format('["{0}"]', github.event.inputs.graphics-api)) || fromJson('["Direct3D11","Direct3D12","Vulkan"]') }}
env:
STRIDE_GRAPHICS_SOFTWARE_RENDERING: "1"
STRIDE_TESTS_RENDERDOC: "error"
STRIDE_MAX_PARALLELISM: "8"
# Crash dump collection (covers 3 crash types):
STRIDE_TESTS_CRASH_DUMPS: "1" # Type 1: SEHException logging + minidump via FirstChanceException
STRIDE_TESTS_CRASH_DUMP_DIR: "${{ github.workspace }}\\crash-dumps" # Shared dump directory for all crash types
DOTNET_DbgEnableMiniDump: "1" # Type 2: .NET unhandled exceptions
DOTNET_DbgMiniDumpType: "1" # MiniDumpNormal
DOTNET_DbgMiniDumpName: "${{ github.workspace }}\\crash-dumps\\dotnet_%p.dmp" # Type 2: dump path
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Configure crash dumps
shell: pwsh
run: |
# WER DontShowUI: suppress dialogs without disabling dump generation
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v DontShowUI /t REG_DWORD /d 1 /f
# WER LocalDumps: capture native crashes (type 3)
$dumpDir = "${{ github.workspace }}\crash-dumps"
New-Item -Path $dumpDir -ItemType Directory -Force | Out-Null
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d $dumpDir /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
- name: Install Vulkan SDK
if: matrix.graphics-api == 'Vulkan'
uses: jakoch/install-vulkan-sdk-action@v1
with:
vulkan_version: 1.4.304.1
install_runtime: true
cache: true
stripdown: true
- name: Register SwiftShader ICD
if: matrix.graphics-api == 'Vulkan'
shell: pwsh
run: |
# Restore with StrideGraphicsApi=Vulkan so the conditional SwiftShader PackageReference is evaluated
# (Stride's custom multi-build targets don't run during restore)
dotnet restore build\Stride.Tests.Game.GPU.slnf -p:StrideGraphicsApis=Vulkan -p:StrideGraphicsApi=Vulkan
# Find SwiftShader DLL in NuGet cache and register an ICD before build
# (CompilerApp needs SwiftShader at build time for Skybox asset compilation)
$dll = Get-ChildItem -Recurse -Path "$env:USERPROFILE\.nuget\packages\stride.dependencies.swiftshader" -Filter vk_swiftshader.dll -ErrorAction SilentlyContinue | Select-Object -First 1
if ($dll) {
$icdPath = Join-Path $dll.DirectoryName "vk_swiftshader_icd.json"
$dllPath = $dll.FullName -replace '\\', '\\\\'
Set-Content -Path $icdPath -Value "{`"file_format_version`":`"1.0.0`",`"ICD`":{`"library_path`":`"$dllPath`",`"api_version`":`"1.0.5`"}}"
New-Item -Path "HKLM:\SOFTWARE\Khronos\Vulkan\Drivers" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SOFTWARE\Khronos\Vulkan\Drivers" -Name $icdPath -Value 0 -PropertyType DWord -Force | Out-Null
Write-Host "Registered SwiftShader ICD: $icdPath"
} else {
Write-Warning "SwiftShader DLL not found in NuGet cache"
}
- name: Build
run: |
dotnet build build\Stride.Tests.Game.GPU.slnf `
-p:StrideNativeBuildMode=Clang `
-m:1 -nr:false `
-v:m -p:WarningLevel=0 `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StridePlatforms=Windows `
-p:StrideGraphicsApis=${{ matrix.graphics-api }}
- name: Test
run: |
dotnet test build\Stride.Tests.Game.GPU.slnf `
--no-build `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StrideGraphicsApis=${{ matrix.graphics-api }} `
-- RunConfiguration.MaxCpuCount=1
- name: Collect symbols for crash analysis
if: always()
shell: pwsh
run: |
$dumpDir = "${{ github.workspace }}\crash-dumps"
if (Get-ChildItem $dumpDir -Filter *.dmp -ErrorAction SilentlyContinue) {
$symDir = Join-Path $dumpDir "symbols"
New-Item -Path $symDir -ItemType Directory -Force | Out-Null
Get-ChildItem bin -Recurse -Include *.pdb,*.dll,*.exe | Copy-Item -Destination $symDir
Write-Host "Collected $(( Get-ChildItem $symDir ).Count) symbol files for crash analysis"
}
- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: test-artifacts-game-${{ matrix.graphics-api }}
path: |
tests/local/
crash-dumps/
if-no-files-found: ignore
47 changes: 47 additions & 0 deletions .github/workflows/test-windows-simple.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Test Windows (Simple)

on:
workflow_dispatch:
inputs:
build-type:
description: Build
default: Debug
type: choice
options:
- Debug
- Release
workflow_call:
inputs:
build-type:
default: Debug
type: string

concurrency:
group: test-windows-simple-${{ github.event.pull_request.number || github.ref }}-${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }}
cancel-in-progress: true

jobs:
Windows-Tests:
name: Test (${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }}, Simple)
runs-on: windows-2025-vs2026
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Build
run: |
dotnet build build\Stride.Tests.Simple.slnf `
-p:StrideNativeBuildMode=Clang `
-m:1 -nr:false `
-v:m -p:WarningLevel=0 `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }} `
-p:StridePlatforms=Windows `
-p:StrideGraphicsApis=Direct3D11
- name: Test
run: |
dotnet test build\Stride.Tests.Simple.slnf `
--no-build `
-p:Configuration=${{ github.event.inputs.build-type || inputs.build-type || 'Debug' }}
Loading
Loading