Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
8931136
rebuild setup: old code moved to legacy, linux presets, loader smoke …
codethinki Oct 13, 2026
5c18777
vcpkg: vulkan-memory-allocator
codethinki Oct 14, 2026
9f4ae14
cvk: port Instance and DebugMessenger, code and doc style guide
codethinki Oct 16, 2026
da550db
AGENTS.md: fragments win over full sentences
codethinki Oct 16, 2026
f66b2a7
AGENTS.md: branch structure
codethinki Oct 16, 2026
333de52
style: no section comments above namespaces, no empty lines at namesp…
codethinki Oct 16, 2026
f3e50d3
style: accessors and constants in the first public section
codethinki Oct 16, 2026
d19d843
AGENTS.md: move only rule for handle classes
codethinki Oct 16, 2026
538755b
vcpkg: current baseline for vulkan 1.4 headers, AGENTS.md: free funct…
codethinki Oct 16, 2026
e9d14d9
cmake: link boost-pfr, the cth package does not export it
codethinki Oct 16, 2026
1831b37
fix(debug_messenger): store the VkInstance, the instance can move
codethinki Oct 16, 2026
d7e8a00
cvk: port physical device, surface, device, queue and core
codethinki Oct 16, 2026
0efbf3d
fix: move assignment destroys the old handle
codethinki Oct 16, 2026
d226453
cvk: port fence, semaphore and timeline semaphore
codethinki Oct 16, 2026
06ab4a0
style: declarations leave out parameter names that repeat the type
codethinki Oct 16, 2026
7c185a7
cvk: port shader, descriptor set layout, pipeline layout and pipeline
codethinki Oct 16, 2026
e3c3727
cvk: port sampler
codethinki Oct 16, 2026
885d76e
cvk: fence os handle export, fixed
codethinki Oct 16, 2026
18a063a
cvk: shader runtime compile and derivative pipelines, fixed
codethinki Oct 16, 2026
4da1c1d
cvk: objects store the core again, parents do not move
codethinki Oct 16, 2026
5322bb4
cvk: unique_handle, unique_ptr with destroy context deleters
codethinki Oct 16, 2026
24a7371
cvk: trial conversion to unique_handle
codethinki Oct 16, 2026
541e462
cvk: unique_handle takes the context with the handle
codethinki Oct 16, 2026
56a213d
style: lifecycle reset() is invalidate()
codethinki Oct 16, 2026
6f56e44
cvk: every handle class on unique_handle, explicit deleters
codethinki Oct 16, 2026
10712a1
cvk: core_handle alias
codethinki Oct 16, 2026
18db7f5
AGENTS.md: no naming row for core_handle
codethinki Oct 16, 2026
f893f03
AGENTS.md: _t only for aliases that rename a type
codethinki Oct 16, 2026
2158043
style: lifecycle invalidate() is forget()
codethinki Oct 16, 2026
7ee6583
cvk tests: handle_deleter test loads the instance functions
codethinki Oct 16, 2026
349a185
cvk: VMA allocator owned by the core, Memory
codethinki Oct 16, 2026
a982ae9
cvk: vma_handle alias
codethinki Oct 16, 2026
1025cdb
cvk: core_handle and vma_handle in their own headers
codethinki Oct 16, 2026
c88d50c
cvk: instance_handle in its own header, unique_handle header only
codethinki Oct 16, 2026
0d14a85
cvk: deleters header only
codethinki Oct 16, 2026
f9039ab
cvk: constexpr handles, deleters and config functions
codethinki Oct 16, 2026
782cbc6
cvk: constexpr accessors and debug checks
codethinki Oct 16, 2026
aa9d794
cvk: port buffer
codethinki Oct 16, 2026
02b1047
cvk: buffer config with create flags and queue families
codethinki Oct 16, 2026
29b6870
cvk: buffer passes the queue families as configured
codethinki Oct 16, 2026
76b8068
cvk: BaseBuffer and typed Buffer<T>
codethinki Oct 16, 2026
00e50e8
cvk: Buffer<T> uses std::start_lifetime_as_array without fallback
codethinki Oct 16, 2026
fd38c17
cvk: Buffer<T> falls back to reinterpret_cast without start_lifetime_as
codethinki Oct 16, 2026
17259cf
cvk: port image
codethinki Oct 16, 2026
a0f3737
cvk: command pool and command buffers
codethinki Oct 16, 2026
42fee9d
cvk: command pool counts through public functions, resets end recordings
codethinki Oct 16, 2026
cad5997
cvk: vk_handle_t in every class, handle aliases take the class only
codethinki Oct 17, 2026
ce1a553
cvk: buffer copy and stage, pipeline bind
codethinki Oct 17, 2026
75d378b
cvk: extension features in the feature chain, require dynamic renderi…
codethinki Oct 17, 2026
f127949
cvk: barriers (sync2), image layout transitions and image copy
codethinki Oct 17, 2026
6eaf2ca
cvk: port image view
codethinki Oct 17, 2026
8c81a27
cvk: dynamic rendering on the command buffer, local read, barriers in…
codethinki Oct 17, 2026
0d42ae4
cvk: draws, viewport and scissor, vertex and index buffer binds, push…
codethinki Oct 17, 2026
021e823
cvk: explicit image layouts, layout tracking moves to jvk prework
codethinki Oct 17, 2026
b5eea5f
cvk: queue submit, aggregate barrier, sync validation, pipeline keeps…
codethinki Oct 17, 2026
c8b83ec
cvk: require descriptor indexing, mark the gcc const aggregate workar…
codethinki Oct 17, 2026
1df765b
cvk: aspect mask from the format, attachment format checks
codethinki Oct 17, 2026
d620a94
cvk: swapchain with maintenance1 present fences, fix undefined layout…
codethinki Oct 18, 2026
db23dfb
cvk: todo for the custom swapchain move assignment
codethinki Oct 18, 2026
18c4dec
build: cth from the lib/cth submodule
codethinki Oct 18, 2026
1a7e1ae
cvk: descriptor pool and sets, bindless
codethinki Oct 18, 2026
edb7351
cvk: DescriptorPoolConfig constructor from the layouts
codethinki Oct 18, 2026
acde813
cvk: not_null_ptr, config constructors instead of the Default factories
codethinki Oct 18, 2026
acae8fe
cvk: precompiled header for the tests
codethinki Oct 18, 2026
8b06bca
cvk: attachment mapping for local read, binds and push constants on t…
codethinki Oct 18, 2026
cfccb24
cvk: command buffer stores only its own rendering, shorter command api
codethinki Oct 19, 2026
e57a7c1
cvk: fix failed core create, device queues after wrap, messenger wrap
codethinki Oct 19, 2026
ada251d
cvk: DeviceFeatures, physical device holds queried data only
codethinki Oct 19, 2026
10f78c0
cvk: handle headers into utility/handle
codethinki Oct 19, 2026
d0a0d01
cvk: FeatureChain not copyable or movable, auto for the struct types
codethinki Oct 19, 2026
6179aad
AGENTS: the three cases of classes that differ from move only
codethinki Oct 19, 2026
0eca512
AGENTS: named constructors are PascalCase
codethinki Oct 19, 2026
ee4c606
cvk: Instance::Config, checks in create(), create_t constructor
codethinki Oct 19, 2026
7131374
cvk: queue without lifecycle, queue mutexes through device release, w…
codethinki Oct 19, 2026
ecb504d
cvk: descriptor write variant, buffer descriptor info in BufferDescri…
codethinki Oct 19, 2026
5901962
cvk: DescriptorWrite from the resources, the binding decides the rest
codethinki Oct 20, 2026
81dcb39
cvk: image layout of a descriptor write, default from the binding type
codethinki Oct 20, 2026
8fdc9b0
cvk: Mapping, Range and BufferCopy, std::byte, optional memory
codethinki Oct 20, 2026
b1d0499
cvk: layout_transition takes the new layout first, the target first r…
codethinki Oct 20, 2026
7c88e2f
cvk: LayoutTransition takes new, old, dst, src
codethinki Oct 20, 2026
b2fd0b5
cvk: barrier scope parameters dst first, fields keep the Vulkan order
codethinki Oct 20, 2026
541b673
cvk: Core keeps the queue index per entry, queue() returns the queue …
codethinki Oct 20, 2026
5d0d51b
cvk: no queue mutexes, the caller synchronizes the queues
codethinki Oct 20, 2026
c581e39
cvk: timeline counter without atomic, default move, signal order in t…
codethinki Oct 20, 2026
7aa6924
cvk: swapchain keeps a copy of the present queue
codethinki Oct 20, 2026
7262ef1
cvk: one barrier scope per layout instead of the transition table, sh…
codethinki Oct 21, 2026
183df42
cvk: TimelineSemaphore waits for a value
codethinki Oct 21, 2026
d21ae8f
cvk: Image::copyTo into a buffer, the buffer copy from an image calls it
codethinki Oct 21, 2026
4e2b313
cvk: Image::blitMipLevels fills the mip chain, every level ends in tr…
codethinki Oct 21, 2026
2353562
cvk tests: one shared instance and device per process, one ctest proc…
codethinki Oct 21, 2026
c778fb0
cmake: link with lld when it is installed
codethinki Oct 21, 2026
bb42f03
cvk: array layers in images, views, barriers, copies, blits and rende…
codethinki Oct 21, 2026
e21d703
cvk: check values in the cth log messages instead of details lines
codethinki Oct 21, 2026
4ed1696
cvk: BasePipeline with GraphicsPipeline (was Pipeline) and ComputePip…
codethinki Oct 21, 2026
57c1380
cvk: pipelines take the core from their layout
codethinki Oct 21, 2026
fdbb2ae
cvk: CmdPoolConfig, GraphicsPipelineConfig and DescriptorPoolConfig a…
codethinki Oct 21, 2026
7202c7d
cvk: every cvk throw is a cvk_exception, the pipeline layout checks i…
codethinki Oct 21, 2026
2e3d7d5
cvk: create constructors take a create_t tag when create() has no req…
codethinki Oct 21, 2026
1bc2c39
cvk: execute secondaries from one array, through pointers or one by one
codethinki Oct 21, 2026
e5780f7
cvk: vectors instead of unordered maps for the queue family counts an…
codethinki Oct 21, 2026
6b8d01b
cvk: execute secondaries from a braced list of pointers, explicit Des…
codethinki Oct 21, 2026
bfb3209
lib: cth with gtl hash maps, cth_cmake with find modules, flat_hash_m…
codethinki Oct 21, 2026
33dea85
AGENTS: shorter rules, the override rule
codethinki Oct 21, 2026
1cb0b08
AGENTS: std call patterns, exception type per module
codethinki Oct 21, 2026
10d5b5a
AGENTS: general rules instead of lists of cases
codethinki Oct 21, 2026
ef27af4
cvk: the swapchain picks format and present mode from its config, rec…
codethinki Oct 21, 2026
7ee7581
cvk tests: a failed recreate keeps the swapchain
codethinki Oct 21, 2026
a251b65
cvk: the sampler warns when it clamps maxAnisotropy
codethinki Oct 21, 2026
5ef7eff
cvk: Core::Config::device picks a device by uuid, the automatic pick …
codethinki Oct 21, 2026
aa420c2
cvk: TODO for a reflection based swapchain move assignment
codethinki Oct 21, 2026
db201e5
cvk: dev::enumerate for the two-call queries, repeats on VK_INCOMPLET…
codethinki Oct 21, 2026
004e92a
cvk: inline constexpr create tag, explicit cvk_exception conversion, …
codethinki Oct 21, 2026
e546326
cvk: addStage takes the entry point
codethinki Oct 21, 2026
fcab959
cvk: the swapchain keeps its generations in one vector, default move …
codethinki Oct 21, 2026
ceaa20f
cvk: a failed Instance::create leaves the instance not created, no cl…
codethinki Oct 21, 2026
7edea62
cvk: messenger config without Default(), default_debug_callback, priv…
codethinki Oct 21, 2026
0061f19
cvk: free constexpr mip_level_count and mip_extent
codethinki Oct 21, 2026
680887f
cvk: Cvk is a reference counted loader object on cth::co::global_switch
codethinki Oct 21, 2026
c686ae3
AGENTS: CubeMap() as the named constructor example
codethinki Oct 21, 2026
9c182da
cvk: the Cvk loader switch is a function local static, no static init…
codethinki Oct 21, 2026
752716f
cvk: the messenger config checks its callback, barrier test line width
codethinki Oct 21, 2026
26b3a90
lib: cth with the thread safe global_switch, Cvk is thread safe
codethinki Oct 21, 2026
a943e9e
ci: GitHub Actions on the cth pattern, linux tests on lavapipe, windo…
codethinki Oct 21, 2026
2e815b0
ci: commit the CI presets, the gitignore covers only the root CMakeUs…
codethinki Oct 21, 2026
5af92ff
lib: RGFW fork as submodule on branch cth_engine, from the 1.8.1 release
codethinki Oct 21, 2026
775fefc
AGENTS: lib/rgfw
codethinki Oct 21, 2026
4318b6d
cvk tests: shared instance with validation checks, InstanceContext fo…
codethinki Oct 21, 2026
e94ea02
cvk: docs for the guarantees the tests check
codethinki Oct 21, 2026
d95b5ee
cvk: graphics and compute families count as transfer, shader log next…
codethinki Oct 21, 2026
44251b4
lib: RGFW with Wayland and Win32 only, wayland protocols generated at…
codethinki Oct 21, 2026
ffad759
cgfw: window module over RGFW, Vulkan surface into cvk, behavior test…
codethinki Oct 21, 2026
48ca947
lib: cth_cmake with C23, rgfw.cmake needs no C17 override
codethinki Oct 22, 2026
b260a9d
AGENTS: opaque OS handles are void*
codethinki Oct 22, 2026
13eb99d
cgfw: native_window with opaque handles, Window::nativeWindow()
codethinki Oct 22, 2026
042e10b
ci: runs on pushes and pull requests to master and v2, like cth
codethinki Oct 23, 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
  •  
  •  
  •  
48 changes: 48 additions & 0 deletions .github/actions/build-container/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: 'Build Container'
description: 'Builds and pushes the Linux Docker image'
inputs:
dockerfile:
description: 'Path to the Dockerfile'
required: true
tag:
description: 'Tag suffix for the image'
required: true
image-subdir:
description: 'Subdirectory to push image to'
default: 'cache'

outputs:
container-image-adress:
description: Address of container image
value: ${{ steps.set-image.outputs.image }}

runs:
using: "composite"
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

- name: Set image names
id: set-image
shell: bash
run: |
image="ghcr.io/${{ github.repository }}/${{ inputs.image-subdir }}:${{ inputs.tag }}"
echo "image=$image" >> $GITHUB_OUTPUT
echo "cache_image=${image}-cache" >> $GITHUB_OUTPUT

- name: Log in to the Container registry
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}

- name: Build Docker image
uses: docker/build-push-action@v7
with:
context: .
file: ${{ inputs.dockerfile }}
push: true
tags: ${{ steps.set-image.outputs.image }}
cache-from: type=registry,ref=${{ steps.set-image.outputs.cache_image }}
cache-to: type=registry,ref=${{ steps.set-image.outputs.cache_image }},mode=max
49 changes: 49 additions & 0 deletions .github/actions/build-engine/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: 'Build engine'
description: 'Handles Caching, Configuration, and Compilation'
inputs:
cache_prefix:
description: 'Cache Prefix e.g. OS'
required: true
preset:
description: 'CI preset from ci/CMakeUserPresets.json'
required: true

runs:
using: "composite"
steps:
# --- 1. setup vcpkg cache ---
- name: setup vcpkg
uses: ./.github/actions/setup-vcpkg-cache

# --- 2. configure ---
- name: Configure CMake
shell: bash
run: |
[ -f ci/CMakeUserPresets.json ] && cp ci/CMakeUserPresets.json CMakeUserPresets.json
cmake --preset ${{ inputs.preset }}

# --- 3. restore BuildCache ---
- name: Restore BuildCache
id: buildcache
uses: ./.github/actions/restore-cache
with:
path: .buildcache
key: buildcache-${{ inputs.cache_prefix }}-${{ inputs.preset }}-${{ github.run_id }}
restore-keys: buildcache-${{ inputs.cache_prefix }}-${{ inputs.preset }}-
global-tag: buildcache-${{ inputs.cache_prefix }}-${{ inputs.preset }}
gh-token: ${{ github.token }}

# --- 4. build ---
- name: Build
shell: bash
run: cmake --build --preset ${{ inputs.preset }}

# --- 5. save BuildCache ---
- name: Save BuildCache
if: always()
uses: ./.github/actions/save-cache
with:
path: .buildcache
key: ${{ steps.buildcache.outputs.primary-key }}
global-tag: buildcache-${{ inputs.cache_prefix }}-${{ inputs.preset }}
gh-token: ${{ github.token }}
73 changes: 73 additions & 0 deletions .github/actions/restore-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: 'Restore Cache'
description: 'Restores from GitHub Cache or GHCR'
inputs:
path:
description: 'File path to restore'
required: true
key:
description: 'Primary key for GitHub Cache'
required: true
restore-keys:
description: 'Fallback keys for GitHub Cache'
required: false
global-tag:
description: 'OCI Tag for GHCR'
required: true
gh-token:
description: 'GitHub Token for GHCR auth'
required: true
default: ${{ github.token }}

outputs:
cache-hit:
description: 'true if cache was found in either github or GHCR'
value: ${{ steps.local-cache.outputs.cache-hit == 'true' || steps.global-cache.outputs.hit == 'true' }}
primary-key:
description: 'The key used for saving later'
value: ${{ steps.local-cache.outputs.cache-primary-key }}

runs:
using: "composite"
steps:
# --- Local GitHub cache ---
- name: Restore local cache
id: local-cache
uses: actions/cache/restore@v6
with:
path: ${{ inputs.path }}
key: ${{ inputs.key }}
restore-keys: ${{ inputs.restore-keys }}

# --- Setup ORAS (Only if local missed) ---
- name: Set up ORAS
if: steps.local-cache.outputs.cache-matched-key == ''
uses: oras-project/setup-oras@v2

# --- Login ---
- name: Login to GHCR (Native ORAS)
if: steps.local-cache.outputs.cache-matched-key == ''
shell: bash
run: |
echo "${{ inputs.gh-token }}" | oras login ghcr.io \
--username "${{ github.actor }}" \
--password-stdin

# --- Global GHCR cache ---
- name: Restore global cache
id: global-cache
if: steps.local-cache.outputs.cache-matched-key == ''
shell: bash
env:
REPO: ghcr.io/${{ github.repository }}
TAG: master-${{ inputs.global-tag }}
TARGET_PATH: ${{ inputs.path }}
run: |
echo "Local miss. Pulling from GHCR: $TAG"
if oras pull "$REPO/cache:$TAG"; then
echo "hit=true" >> $GITHUB_OUTPUT
tar -xzf cache-archive.tar.gz
rm cache-archive.tar.gz
else
echo "hit=false" >> $GITHUB_OUTPUT
echo "Global cache miss."
fi
58 changes: 58 additions & 0 deletions .github/actions/save-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: 'Save Cache'
description: 'Saves to GitHub Cache (Always) and GHCR (Only on master)'
inputs:
path:
description: 'File path to save'
required: true
key:
description: 'Key used in the restore step'
required: true
global-tag:
description: 'OCI Tag for GHCR'
required: true
gh-token:
description: 'GitHub Token for GHCR auth'
required: true
default: ${{ github.token }}

runs:
using: "composite"
steps:
# --- Local github cache ---
- name: Save Local Cache
uses: actions/cache/save@v6
with:
path: ${{ inputs.path }}
key: ${{ inputs.key }}

# --- Setup for Global (Only on master) ---
- name: Set up ORAS
if: github.ref == 'refs/heads/master'
uses: oras-project/setup-oras@v2

# --- Login ---
- name: Login to GHCR (Native ORAS)
if: github.ref == 'refs/heads/master'
shell: bash
run: |
echo "${{ inputs.gh-token }}" | oras login ghcr.io \
--username "${{ github.actor }}" \
--password-stdin

# --- Global GHCR cache (master only) ---
- name: Save Global Cache
if: github.ref == 'refs/heads/master'
shell: bash
env:
REPO: ghcr.io/${{ github.repository }}
TAG: master-${{ inputs.global-tag }}
TARGET_PATH: ${{ inputs.path }}
run: |
if [ -d "$TARGET_PATH" ]; then
echo "Compressing for Global Cache..."
tar -czf cache-archive.tar.gz "$TARGET_PATH"

echo "Pushing to GHCR..."
oras push "$REPO/cache:$TAG" cache-archive.tar.gz
rm cache-archive.tar.gz
fi
42 changes: 42 additions & 0 deletions .github/actions/setup-vcpkg-cache/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: 'Vcpkg Cache'
description: 'sets up vcpkg to use NuGet for caching'
inputs:
gh-token:
description: 'GitHub Token for GHCR auth'
required: true
default: ${{ github.token }}

runs:
using: "composite"
steps:
# --- WINDOWS: (dotnet nuget) ---
- name: setup vcpkg nuget source
if: runner.os == 'Windows'
shell: bash
run: |
dotnet nuget add source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \
--name "GitHub" \
--username "${{ github.repository_owner }}" \
--password "${{ inputs.gh-token }}" \
--store-password-in-clear-text

# --- other: (mono + nuget.exe) ---
- name: setup vcpkg nuget source
if: runner.os != 'Windows'
shell: bash
run: |
# download nuget.exe
wget -qO nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
NUGET_PATH="$(pwd)/nuget.exe"

# add source
mono "$NUGET_PATH" sources add \
-Name "GitHub" \
-Source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \
-UserName "${{ github.repository_owner }}" \
-Password "${{ inputs.gh-token }}" \
-StorePasswordInClearText

# set API key for push
mono "$NUGET_PATH" setapikey "${{ inputs.gh-token }}" \
-Source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json"
47 changes: 47 additions & 0 deletions .github/actions/setup-windows/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: 'Setup Windows Environment'
description: 'Sets up MSVC, Vcpkg, BuildCache, CMake and Ninja'
inputs:
compiler:
description: 'compiler of the CI preset (msvc or clang)'
required: true

runs:
using: "composite"
steps:
- uses: ilammy/msvc-dev-cmd@v1

- name: Setup Vcpkg Environment
shell: pwsh
run: |
$vcpkgPath = $env:VCPKG_INSTALLATION_ROOT
if (-not (Test-Path "$vcpkgPath")) {
Write-Error "Vcpkg not found at VCPKG_INSTALLATION_ROOT ($vcpkgPath)"
exit 1
}
"VCPKG_ROOT=$vcpkgPath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

- name: Install BuildCache
shell: pwsh
run: |
Invoke-WebRequest -Uri "https://gitlab.com/bits-n-bites/buildcache/-/releases/v0.31.7/downloads/buildcache-windows.zip" -OutFile "buildcache.zip"
Expand-Archive buildcache.zip -DestinationPath c:\buildcache
echo "c:\buildcache\buildcache\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

- name: Install LLVM
if: inputs.compiler == 'clang'
shell: pwsh
run: |
$version = "23.1.2"
$name = "clang+llvm-$version-x86_64-pc-windows-msvc"
curl.exe -fsSL -o "$env:RUNNER_TEMP\llvm.tar.xz" "https://github.com/llvm/llvm-project/releases/download/llvmorg-$version/$name.tar.xz"
cmd /c "7z x %RUNNER_TEMP%\llvm.tar.xz -so | 7z x -si -ttar -oc:\llvm > nul"
& "c:\llvm\$name\bin\clang++.exe" --version
echo "c:\llvm\$name\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

- uses: actions/setup-python@v7
with:
python-version: "3.x"

- name: Install CMake & Ninja
run: pip install --upgrade cmake ninja
shell: powershell
13 changes: 13 additions & 0 deletions .github/actions/test-engine/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: 'Test engine'
description: 'Runs CTest with the given CI test preset'
inputs:
preset:
description: 'CI preset from ci/CMakeUserPresets.json'
required: true

runs:
using: "composite"
steps:
- name: Test
shell: bash
run: ctest --preset ${{ inputs.preset }} --output-on-failure
36 changes: 36 additions & 0 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Build & Test

on:
push: { branches: ["master", "v2"] }
pull_request: { branches: ["master", "v2"] }
workflow_dispatch:

permissions: { contents: read, packages: write }

jobs:
linux:
name: Linux (${{ matrix.compiler }} ${{ matrix.config }})
strategy:
fail-fast: false
matrix:
compiler: [gcc, clang]
# debug runs the validation layers with synchronization validation
config: [debug, release]

uses: ./.github/workflows/linux-pipeline.yml
with:
compiler: ${{ matrix.compiler }}
config: ${{ matrix.config }}
secrets: inherit

windows:
name: Windows (${{ matrix.compiler }})
strategy:
fail-fast: false
matrix:
compiler: [msvc, clang]

uses: ./.github/workflows/windows-pipeline.yml
with:
compiler: ${{ matrix.compiler }}
secrets: inherit
Loading
Loading