name: Windows editor and software Vulkan on: push: pull_request: workflow_dispatch: permissions: contents: read concurrency: group: windows-graphics-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: false jobs: windows-graphics: runs-on: windows-2025 timeout-minutes: 90 steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 with: python-version: '3.12' - name: Visual Studio x64 environment uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 with: arch: x64 - name: Enable the documented Windows long-path developer profile shell: pwsh run: | $key = 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' Write-Output "Previous LongPathsEnabled: $((Get-ItemProperty -Path $key).LongPathsEnabled)" New-ItemProperty -Path $key -Name LongPathsEnabled -Value 1 -PropertyType DWORD -Force - name: Identify pinned Vulkan source cache id: vulkan-identity run: python tools/ci/prepare_windows_vulkan.py --cache-key - name: Restore pinned Vulkan test tools id: vulkan-cache uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 with: key: ${{ steps.vulkan-identity.outputs.key }} restore-keys: ${{ steps.vulkan-identity.outputs.legacy }} path: | .cache/windows-graphics/sdk .cache/windows-graphics/driver - name: Build official Vulkan loader and SwiftShader from pinned sources run: python tools/ci/prepare_windows_vulkan.py - name: Save successfully built Vulkan test tools if: steps.vulkan-cache.outputs.cache-hit != 'true' uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 with: key: ${{ steps.vulkan-cache.outputs.cache-primary-key }} path: | .cache/windows-graphics/sdk .cache/windows-graphics/driver - name: Probe Vulkan loader and SwiftShader before compiling the engine # Hosted Windows jobs are elevated, so Khronos correctly ignores driver # environment overrides. Register the software ICD only on this disposable VM. # https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderDriverInterface.md#driver-discovery-on-windows env: VK_LOADER_DEBUG: all run: | $driverKey = 'HKLM:\SOFTWARE\Khronos\Vulkan\Drivers' New-Item -Path $driverKey -Force | Out-Null New-ItemProperty -Path $driverKey -Name $env:VK_DRIVER_FILES -PropertyType DWord -Value 0 -Force | Out-Null python tools/ci/probe_windows_vulkan.py - name: Fetch checksum-verified Slang compiler run: python tools/fetch_slang.py - name: Configure full editor and Player run: cmake --preset windows-debug -DFASET_BUILD_RENDERER=ON -DFASET_BUILD_EDITOR=ON - name: Build full editor and tests run: cmake --build --preset windows-debug --parallel 2 - name: CPU contracts and software GPU pixel tests env: VK_LOADER_DEBUG: error,warn,driver run: ctest --preset windows-debug --timeout 180 - name: Real Release exports, 2D and 3D execution, incremental Debug rebuild run: build/windows-debug/faset_build_service_tests.exe --integration .cache/windows-export-e2e - name: Export and relocate both checked-in playable games run: python tools/verify_playable_exports.py --editor build/windows-debug/faset_editor.exe --output .cache/windows-playable-exports - name: Preserve graphics and export evidence if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: windows-graphics-evidence if-no-files-found: warn retention-days: 14 include-hidden-files: true path: | .cache/windows-graphics/toolchain.json .cache/windows-graphics/probe.json .cache/windows-graphics/driver/*.json .cache/windows-graphics/sdk/source-identity.json build/windows-debug/Testing/Temporary/LastTest.log build/windows-debug/*test.ppm .cache/windows-export-e2e/result-*.json .cache/windows-export-e2e/export-*/generations/*/manifest.json .cache/windows-export-e2e/export-*/generations/*/verification.ppm .cache/windows-playable-exports/report.json .cache/windows-playable-exports/evidence/*