Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
2ec80a7
Switch to std::format, remove fmtlib and wis::format
Agrael1 Apr 20, 2026
5329c00
Add optional DirectX 12 Agility SDK support via CMake
Agrael1 Apr 20, 2026
b2c352d
Split NuGet/ZIP packaging; add Agility SDK validation
Agrael1 Apr 21, 2026
a7bd138
Refactor Agility SDK integration and CMake helpers
Agrael1 Apr 22, 2026
d6ea1d3
Overhaul packaging: CPack, NuGet, ZIP, DXC, integration tests
Agrael1 Apr 22, 2026
2ff8d65
Refactor API, add Conan support, improve docs & scripts
Agrael1 Apr 23, 2026
a189ce3
Remove gpu_upload_heap_budget from device properties
Agrael1 Apr 23, 2026
222d070
Refactor dependency management: add Conan/CPM toggle
Agrael1 Apr 24, 2026
c7a5574
Improve Conan/CMake integration and dependency handling
Agrael1 Apr 24, 2026
52c2cc5
Add Raytracing extension with DX12/Vulkan support
Agrael1 Apr 25, 2026
f201854
Add acceleration structure API for DX12 and Vulkan
Agrael1 Apr 26, 2026
e1d49a9
Add cross-API query for BLAS memory requirements
Agrael1 Apr 26, 2026
1493938
Refactor AS ownership: caller manages buffer/device lifetime
Agrael1 Apr 26, 2026
3be76e9
Add top-level AS allocation info query to API
Agrael1 Apr 27, 2026
1601d15
swapchain rt
Agrael1 Apr 29, 2026
763151a
Add Video extension with DX12/Vulkan support and codegen
Agrael1 Apr 30, 2026
a0c42e4
Add extensible video decode capability query API
Agrael1 May 2, 2026
136cf3c
Add video format & profile support, refactor codec desc
Agrael1 May 5, 2026
1f5ed5a
Add video format validation to Vulkan decoding extension
Agrael1 May 6, 2026
d1c3548
Refactor QueryCodecCaps to return Result only
Agrael1 May 7, 2026
4718893
Add cross-platform video decoder creation API
Agrael1 May 7, 2026
1a88a92
Refactor video API: rename fields, add video decode test
Agrael1 May 7, 2026
c8cd9f2
Refactor Vulkan video decoder resource management
Agrael1 May 8, 2026
010f6d0
Add video decode command list API for DX12 and Vulkan
Agrael1 May 10, 2026
d195af8
- Introduce AV1 enums and structs for profiles, levels, frame types, …
Agrael1 May 12, 2026
a85625a
Add VideoDecoderParameters API for explicit codec params
Agrael1 May 13, 2026
e63e98a
Replace libavif with mBMFF for AVIF parsing
Agrael1 May 27, 2026
41c7e58
Added H265 parsing
Agrael1 Jun 21, 2026
9691af4
Fixed header only build
Agrael1 Jun 21, 2026
8e4d75a
Added Command list view and submit
Agrael1 Jun 21, 2026
8b51641
Added Decoding parameters
Agrael1 Jun 28, 2026
f79f9e9
Added video flags for buffer and texture
Agrael1 Jul 18, 2026
abc71c9
Added slicing of the video
Agrael1 Aug 1, 2026
06d0428
Fixed memory binding to video session and leak of it
Agrael1 Aug 1, 2026
c473d73
Added NAL unit size parsing (QnD)
Agrael1 Aug 1, 2026
6c16f91
fixed NAL parsing error
Agrael1 Aug 1, 2026
c45a736
Changed the query for alignment
Agrael1 Aug 1, 2026
edb45e0
Fixed empty reference info and width + height problem
Agrael1 Aug 1, 2026
c0ba349
Added back decoder params
Agrael1 Aug 1, 2026
62b10cc
All the errors are gon. Access violation still exists
Agrael1 Aug 1, 2026
0a1fb0e
all errors gon
Agrael1 Aug 1, 2026
f9f87e2
Added mutable video formats and removed sampled usage from video formats
Agrael1 Aug 1, 2026
d25386f
Device removal on submission
Agrael1 Aug 2, 2026
f2ad095
The decoding doesn't work, releasig 0.7.1 without video/raytracing
Agrael1 Sep 13, 2026
82913c2
Removed unfinished extensions for 0.7.1 release
Agrael1 Sep 13, 2026
c1dc780
update the restyled workflow
Agrael1 Sep 13, 2026
593250d
Restyled Feat/0.7.1 replaced (#270)
github-actions[bot] Sep 13, 2026
0d69fb8
Restyled Feat/0.7.1 replaced (#271)
github-actions[bot] Sep 13, 2026
94a57e4
Updated the NuGet release workflow
Agrael1 Sep 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
1 change: 0 additions & 1 deletion .clang-format-ignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
# Ignore third-party headers that crash the parser
src/include/wisdom/util/xxhash.h
docs/*
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:

- name: Configure CMake
run: cmake --preset win-msvc-release

- name: Build
run: cmake --build --preset win-msvc-release

Expand Down
45 changes: 44 additions & 1 deletion .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,50 @@ jobs:
shell: pwsh
run: |
$format = '${{ github.event.inputs.format }}'
.\package.ps1 -Format $format -Clean -OutputDir './artifacts'
.\package.ps1 -Format $format -Configuration both -Clean -OutputDir './artifacts'

- name: Validate package contents
shell: pwsh
run: |
Add-Type -AssemblyName System.IO.Compression.FileSystem
$format = '${{ github.event.inputs.format }}'

if ($format -in @('nuget', 'all')) {
$nugetPackage = Get-ChildItem -Path artifacts/*.nupkg | Select-Object -First 1
if (-not $nugetPackage) {
throw "NuGet package was not generated."
}

$nugetArchive = [System.IO.Compression.ZipFile]::OpenRead($nugetPackage.FullName)
try {
$hasAgility = $nugetArchive.Entries | Where-Object { $_.FullName -match '(?i)D3D12Core\.dll|d3d12SDKLayers\.dll|d3dx12/' }
if ($hasAgility) {
throw "NuGet package must not include Agility SDK files."
}
}
finally {
$nugetArchive.Dispose()
}
}

if ($format -in @('zip', 'all')) {
$zipPackage = Get-ChildItem -Path artifacts/*.zip | Select-Object -First 1
if (-not $zipPackage) {
throw "ZIP package was not generated."
}

$zipArchive = [System.IO.Compression.ZipFile]::OpenRead($zipPackage.FullName)
try {
$hasCore = $zipArchive.Entries | Where-Object { $_.FullName -match '(?i)D3D12Core\.dll' }
$hasLayers = $zipArchive.Entries | Where-Object { $_.FullName -match '(?i)d3d12SDKLayers\.dll' }
if (-not $hasCore -or -not $hasLayers) {
throw "ZIP package must include Agility SDK runtime files (D3D12Core.dll and d3d12SDKLayers.dll)."
}
}
finally {
$zipArchive.Dispose()
}
}

- name: Upload NuGet Package
uses: actions/upload-artifact@v4
Expand Down
56 changes: 51 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,45 @@ jobs:
- name: Build and Package
shell: pwsh
run: |
.\package.ps1 -Format all -Clean -OutputDir './artifacts'
.\scripts\package.ps1 -Format all -Configuration both -Clean -OutputDir './artifacts'

- name: Validate package contents
shell: pwsh
run: |
Add-Type -AssemblyName System.IO.Compression.FileSystem

$nugetPackage = Get-ChildItem -Path artifacts/*.nupkg | Select-Object -First 1
if (-not $nugetPackage) {
throw "NuGet package was not generated."
}

$nugetArchive = [System.IO.Compression.ZipFile]::OpenRead($nugetPackage.FullName)
try {
$nugetHasAgility = $nugetArchive.Entries | Where-Object { $_.FullName -match '(?i)D3D12Core\.dll|d3d12SDKLayers\.dll|d3dx12/' }
if ($nugetHasAgility) {
throw "NuGet package must not include Agility SDK files."
}
}
finally {
$nugetArchive.Dispose()
}

$zipPackage = Get-ChildItem -Path artifacts/*.zip | Select-Object -First 1
if (-not $zipPackage) {
throw "ZIP package was not generated."
}

$zipArchive = [System.IO.Compression.ZipFile]::OpenRead($zipPackage.FullName)
try {
$zipHasCore = $zipArchive.Entries | Where-Object { $_.FullName -match '(?i)D3D12Core\.dll' }
$zipHasLayers = $zipArchive.Entries | Where-Object { $_.FullName -match '(?i)d3d12SDKLayers\.dll' }
if (-not $zipHasCore -or -not $zipHasLayers) {
throw "ZIP package must include Agility SDK runtime files (D3D12Core.dll and d3d12SDKLayers.dll)."
}
}
finally {
$zipArchive.Dispose()
}

- name: Upload NuGet Package
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -262,13 +300,13 @@ jobs:
uses: lukka/get-cmake@latest

- name: Configure CMake (Debug)
run: cmake --preset linux-gcc-debug-lib -DWISDOM_VULKAN_HEADER_PATH=${{ github.workspace }}/vulkan-headers/include
run: cmake --preset linux-gcc-debug-lib -DWISDOM_VULKAN_HEADER_PATH=${{ github.workspace }}/vulkan-headers/include -DCMAKE_UNITY_BUILD=ON

- name: Build (Debug)
run: cmake --build --preset linux-gcc-debug-lib

- name: Configure CMake (Release)
run: cmake --preset linux-gcc-lib -DWISDOM_VULKAN_HEADER_PATH=${{ github.workspace }}/vulkan-headers/include
run: cmake --preset linux-gcc-lib -DWISDOM_VULKAN_HEADER_PATH=${{ github.workspace }}/vulkan-headers/include -DCMAKE_UNITY_BUILD=ON

- name: Build (Release)
run: cmake --build --preset linux-gcc-lib
Expand Down Expand Up @@ -333,6 +371,8 @@ jobs:
needs: [version, release]
if: ${{ !failure() && !cancelled() && needs.version.outputs.publish_nuget == 'true' }}
runs-on: windows-latest
permissions:
id-token: write

steps:
- name: Download NuGet Package
Expand All @@ -347,9 +387,15 @@ jobs:
shell: pwsh
run: |
Get-ChildItem -Path . -Recurse | Select-Object FullName


- name: NuGet login (OIDC → temp API key)
uses: NuGet/login@v1
id: login
with:
user: Agrael

- name: Publish to NuGet.org
run: dotnet nuget push wisdom.*.nupkg --api-key "${{ secrets.NUGET_APIKEY }}" --source https://api.nuget.org/v3/index.json --skip-duplicate
run: dotnet nuget push wisdom.*.nupkg --api-key ${{steps.login.outputs.NUGET_API_KEY}} --source https://api.nuget.org/v3/index.json --skip-duplicate

# Step 6: Build and deploy documentation
docs:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/restyled.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
restyled:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.head.ref }}

Expand All @@ -25,7 +25,7 @@ jobs:
!cancelled() &&
steps.restyler.outputs.success == 'true' &&
github.event.pull_request.head.repo.full_name == github.repository
uses: peter-evans/create-pull-request@v6
uses: peter-evans/create-pull-request@v8
with:
base: ${{ steps.restyler.outputs.restyled-base }}
branch: ${{ steps.restyler.outputs.restyled-head }}
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -376,3 +376,4 @@ FodyWeavers.xsd

# Package artifacts
/artifacts/
/tests/integration/cmake/extracted/
52 changes: 30 additions & 22 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,34 @@ include(GenerateExportHeader)
include(cmake/functions.cmake)
wisdom_detect_platform()

# Determine which options to use by default
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "13"
OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "16")
set(LOCAL_USE_FMTLIB TRUE)
else()
set(LOCAL_USE_FMTLIB FALSE)
endif()

if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
set(WTOP ON)
else()
set(WTOP OFF)
endif()

# Options
option(WISDOM_USE_FMT "Build Wisdom with fmtlib" ${LOCAL_USE_FMTLIB})
option(WISDOM_FORCE_VULKAN "Force Vulkan support" OFF)
option(WISDOM_BUILD_EXAMPLES "Build the example project." ${WTOP})
option(WISDOM_BUILD_TESTS "Build the tests." ${WTOP})
option(WISDOM_BUILD_STATIC "Build the static lib." ON)
option(WISDOM_BUILD_SHARED "Build the dynamic lib." ON)
option(WISDOM_BUILD_PLATFORM "Build unified platform extension library." ON)
option(WISDOM_BUILD_DOCS "Build the documentation." OFF)
option(WISDOM_USE_AGILITY_SDK "Download and use DirectX 12 Agility SDK." ON)
option(WISDOM_USE_CONAN
"Use Conan to manage dependencies. Only for library builds." OFF)

# DXC deployment options
set(WISDOM_DXC_PATH
""
CACHE PATH "Path to custom DXC installation (optional)")
set(WISDOM_VULKAN_HEADER_PATH
""
CACHE PATH "Path to custom Vulkan Headers (optional)")

# Conan includes Vulkan Headers.
if(WISDOM_USE_CONAN)
set(WISDOM_VULKAN ON)
endif()

# Load all dependencies
include(cmake/deps.cmake)
include(cmake/doc.cmake)
Expand All @@ -55,7 +49,6 @@ message(
WISDOM_VULKAN: ${WISDOM_VULKAN}
WISDOM_VULKAN_VERSION: ${WISDOM_VULKAN_VERSION}
WISDOM_DX12: ${WISDOM_DX12}
WISDOM_USE_FMT: ${WISDOM_USE_FMT}
WISDOM_VERSION: ${WISDOM_VERSION}
WISDOM_PLATFORM: ${WISDOM_PLATFORM}

Expand All @@ -65,13 +58,10 @@ message(
WISDOM_BUILD_STATIC: ${WISDOM_BUILD_STATIC}
WISDOM_BUILD_SHARED: ${WISDOM_BUILD_SHARED}
WISDOM_BUILD_PLATFORM: ${WISDOM_BUILD_PLATFORM}
WISDOM_USE_AGILITY_SDK: ${WISDOM_USE_AGILITY_SDK}
WISDOM_USE_CONAN: ${WISDOM_USE_CONAN}

WISDOM_VULKAN_HEADER_PATH: ${WISDOM_VULKAN_HEADER_PATH}

DXC Configuration:
Custom Path: ${WISDOM_DXC_PATH}
Executable: ${DXC_EXECUTABLE}
")
WISDOM_VULKAN_HEADER_PATH: ${WISDOM_VULKAN_HEADER_PATH}")

if(WISDOM_BUILD_EXAMPLES AND WISDOM_BUILD_TESTS)
add_subdirectory(generator)
Expand Down Expand Up @@ -105,4 +95,22 @@ configure_package_config_file(
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/wisdom-config-version.cmake
${CMAKE_CURRENT_BINARY_DIR}/wisdom-config.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/wisdom)
include(cmake/install/nuget.cmake)

# Set up package metadata
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_PACKAGE_VENDOR "Agrael")
set(CPACK_NUGET_PACKAGE_AUTHORS "Agrael")
set(CPACK_PACKAGE_DESCRIPTION
"A Low-level thin multiplatform and extensible Graphics API layer over Vulkan and DX12"
)
set(CPACK_PACKAGE_HOMEPAGE_URL "https://agrael1.github.io/Wisdom/")
set(CPACK_NUGET_PACKAGE_REPOSITORY_URL "https://github.com/Agrael1/Wisdom.git")
set(CPACK_NUGET_PACKAGE_ICON "favicon.png") # pulled from installed files
set(CPACK_NUGET_PACKAGE_REPOSITORY_TYPE git)
set(CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION "MIT")
set(CPACK_NUGET_PACKAGE_README "README.md") # pulled from installed files
set(CPACK_PROJECT_CONFIG_FILE
"${CMAKE_CURRENT_LIST_DIR}/cmake/install/cpack-options.cmake")

include(CPack)
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ Vulkan library is loaded dynamically, so it is not required to have Vulkan SDK i
- `WISDOM_BUILD_STATIC=ON` build static library version.
- `WISDOM_BUILD_SHARED=ON` build shared/dynamic library version.
- `WISDOM_BUILD_PLATFORM=ON` build unified platform extension library.
- `WISDOM_USE_AGILITY_SDK=OFF` download and build with Agility SDK instead of Windows SDK, this allows using latest DirectX 12 features on older Windows versions, but requires additional setup and dependencies. Default is `OFF`, which uses Windows SDK that comes with the system and DirectX-Headers.
- `WISDOM_BUILD_DOCS=OFF` build documentation with Doxygen, default is dependent on whether you are building the library as a top project (ON) or as a part/dep for other (OFF)

- `WISDOM_DXC_PATH="Path/to/dxc"` use system DXC compiler instead of the one provided with the library (default uses the one provided)
Expand All @@ -115,8 +116,8 @@ To link library simply use `target_link_libraries(${YOUR_TARGET} PUBLIC wis::wis

Available targets are:

- `wis::wisdom | wis::wisdom-headers` - functional library
- `wis::platform | wis::wisdom-platform-headers` - platform specific extensions (Surface)
- `wis::wisdom | wis::wisdom-headers | wis::wisdom-shared` - functional library
- `wis::platform | wis::wisdom-platform-headers | wis::wisdom-platform-shared` - platform specific extensions (Surface)

There is also Conan package available for consumption, it can't be loaded to Conan Center yet,
but you can add it manually by downloading the repo and executing `conan create .` command in the root of the repository.
Expand Down
63 changes: 28 additions & 35 deletions cmake/deps.cmake
Original file line number Diff line number Diff line change
@@ -1,44 +1,37 @@
include(FetchContent)
set(FETCHCONTENT_UPDATES_DISCONNECTED ON)
set(CPM_DONT_UPDATE_MODULE_PATH ON)
set(GET_CPM_FILE "${CMAKE_CURRENT_LIST_DIR}/deps/get_cpm.cmake")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

# Set CPM source cache
if (NOT CPM_SOURCE_CACHE)
set(CPM_SOURCE_CACHE "${CMAKE_CURRENT_BINARY_DIR}/_deps_cache")
endif ()
# Block CPM if already using Conan, otherwise fetch dependencies using CPM
if(NOT WISDOM_USE_CONAN)
include(FetchContent)
set(FETCHCONTENT_UPDATES_DISCONNECTED ON)
set(CPM_DONT_UPDATE_MODULE_PATH ON)
set(GET_CPM_FILE "${CMAKE_CURRENT_LIST_DIR}/deps/get_cpm.cmake")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

# Set CPM source cache
if (NOT CPM_SOURCE_CACHE)
set(CPM_SOURCE_CACHE "${CMAKE_CURRENT_BINARY_DIR}/_deps_cache")
endif ()


if (NOT EXISTS ${GET_CPM_FILE})
file(DOWNLOAD
https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
"${GET_CPM_FILE}"
)
endif ()
include(${GET_CPM_FILE})
if (NOT EXISTS ${GET_CPM_FILE})
file(DOWNLOAD
https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
"${GET_CPM_FILE}"
)
endif ()
include(${GET_CPM_FILE})
endif()

if (WISDOM_WINDOWS)
include(${CMAKE_CURRENT_LIST_DIR}/deps/deps_win.cmake)
if (WISDOM_USE_CONAN) # This prevents accidental blockade of Agility SDK
find_package(D3D12MemoryAllocator CONFIG QUIET)
if (NOT D3D12MemoryAllocator_FOUND)
message(FATAL_ERROR "D3D12MemoryAllocator not found. Please install it using Conan or disable WISDOM_USE_CONAN.")
endif()
else()
include(${CMAKE_CURRENT_LIST_DIR}/deps/deps_win.cmake)
endif()
endif ()

# Use fmtlib
if (WISDOM_USE_FMT)
find_package(fmt CONFIG QUIET)
if (fmt_FOUND)
message("fmtlib found, skipping download.")
else ()
message("Loading latest fmtlib...")
CPMAddPackage(
NAME fmt
GITHUB_REPOSITORY fmtlib/fmt
GIT_TAG 12.1.0)
endif ()
endif ()

# DXCompiler for HLSL compilation
include(${CMAKE_CURRENT_LIST_DIR}/deps/dxc.cmake)

# Vulkan dependencies
if (WISDOM_VULKAN)
include(${CMAKE_CURRENT_LIST_DIR}/deps/deps_vulkan.cmake)
Expand Down
Loading
Loading