v0.3.1 — CMake + R23/R24 + extension matrix
Pre-release
Pre-release
·
57 commits
to VCK
since this release
Build (cmake migration, PR #7)
- CMake + Ninja replaces
build.bat/build.shas the canonical build path.example/CMakeLists.txtis now the single source of truth for all 4 platforms (Windows MinGW, Windows MSVC, Linux, macOS). Auto-detectsclfrom a Developer Cmd Prompt org++/clang++fromPATH— no--toolchainflag. - Lib-once compile model. All 12 VCK sources compile once into
vck.lib/libvck.a; the 13 example exes + the R14 test exe link against it. Eliminates 143 redundant TU recompilations. Wall-clock cold build-all on a modern 8c box: Linux/macOS ~30-45s (was 10-12 min), Windows MSVC ~1-2 min, Windows MinGW ~2-3 min. - Vulkan-Headers via FetchContent. CMakeLists.txt fetches the
vulkan-sdk-1.4.321.0tag itself, so thevk_video/*.hgap on Ubuntu 22.04 (which ships 1.3.x) is gone. CI no longer needs the manual sparse-checkout dance. - R14 unit test harness (
tests/). Header-only assertion micro-framework, no GoogleTest dep. Asserts everyInitialize()failure returnsfalseAND emits exactly oneVCKLog::Error. Wired throughctest. 14/14 pass on all 4 platforms. build.bat/build.share now thin wrappers aroundcmake --buildthat preserve the interactive[1-13/A/T/0]menu UX.
Added
- CI matrix: Linux + macOS jobs —
.github/workflows/build.ymlnow also runs onubuntu-latest(apt:libvulkan-dev libglfw3-dev vulkan-tools glslang-tools pkg-config g++,./build.sh A) andmacos-latest(brew:vulkan-headers vulkan-loader glfw glslang molten-vk pkg-config,CXX=clang++ ./build.sh A). The Windows job (build.bat [A] on MinGW + LunarG SDK) is unchanged and remains the canonical platform; Linux + macOS catch POSIX regressions inVCK::Window/VCKCrossplatform/build.shthat the Windows runner can't. - Design rule R23 — Extension transparency — every instance- / device-level extension VCK enables on the user's behalf is announced via
VCKLog::Notice("Context", ...)/VCKLog::Notice("Device", ...)at init, including the extension name, the support verdict from the driver, and the fallback path. The user can grep the init log forextand see exactly what's bound to the device. - Design rule R24 —
cfgis the contract — every behavioural difference VCK can express that the user can reasonably want to choose between lives incfg. Litmus test: "If it changes how the user writes their renderer →cfg. If it changes how VCK works underneath → silent bundle." Codified indocs/Design.mdtogether with R23 and the new six-category index (Explicitness / Ownership / Synchronisation / Cost & Scope / Reliability / Transparency). - Silent extension bundle (R24 silent path, R23 logged) —
VulkanDevice::CreateLogicalDevicenow probes for and enables the following on-demand when the device advertises them, with oneNoticeline per result:VK_KHR_synchronization2,VK_KHR_buffer_device_address,VK_EXT_memory_budget,VK_EXT_device_fault,VK_KHR_present_wait,VK_KHR_present_id. No public API surface; symbols become reachable for v0.4 use sites (sync2 inFrameScheduler, BDA in VMM,memory_budgetpolling inDebugTimeline,present_wait/present_idpacing inFrameScheduler). cfgextension knobs (R24 user-visible path, R23 logged) —cfg.rendering.mode = RenderingMode::{Classic, Dynamic}—DynamicrequestsVK_KHR_dynamic_renderingand announces it; the dynamic-rendering codepath itself ships in v0.4, today the request is acknowledged with a fallbackNoticeand rendering stays Classic.cfg.device.enableBindless—truerequestsVK_EXT_descriptor_indexingand announces it; bindless descriptor helpers (DescriptorPool::AddBindlessSet,VulkanPipeline::EnableBindless) ship in v0.4.cfg.swapchain.presentMode = PresentMode::FifoLatestReady— selectsVK_PRESENT_MODE_FIFO_LATEST_READY_EXTwhenVK_EXT_present_mode_fifo_latest_readyis advertised, otherwise falls back toFIFOwith aNotice(rule 23 — never silently substitute a present mode).
Changed
- Example menu reordered low → high VCK assist —
example/build.batandexample/build.shnow present examples in tiers (raw core → debug + tooling → expansion → execution layer → mostly VCK) so the menu narrates the design surface from "you write everything" to "VCK does the boring parts". New numbering:[1] RGBTriangle,[2] MipmapExample,[3] VMMExample,[4] SecondaryCmdExample,[5] DebugTimelineExample,[6] DebugShowcaseExample,[7] AAShowcaseExample,[8] JobGraphExample,[9] SubmissionBatchingExample,[10] TimelineExample,[11] SchedulerPolicyExample,[12] HelloExample,[13] EasyCubeExample. No example code or behaviour changes — menu, dispatch, build-all, anddocs/Examples.mdreflect the new ordering. Historical[#]references in the v0.3.0 / v0.2.x sections below are kept as shipped at the time. - Cookbook expanded to 24 recipes — added recipes 12-24 covering compute dispatch, GPU particles, indirect draw, async compute, shadow mapping, skybox / cubemap, PBR Cook-Torrance + IBL, deferred shading, HDR + tonemapping, bloom, shader hot-reload, GPU picking, and frustum culling. Cookbook now covers most rule-16 gaps (things VCK explicitly refuses to ship but every renderer ends up needing). Doc-only.
- Linux + macOS build noise silenced —
example/build.shnow compiles with-w -Werror=return-type(matchingbuild.bat's silent-on-warnings behaviour); VMA single-header impl, GLFW Cocoa deprecations on macOS, andvulkan_core.h-Wmissing-field-initializersno longer surface as user-visible warnings. CI Linux + macOS jobs gainapt-get -qq/brew install -qflags so the workflow log isn't dominated byGet:/Setting up:/Suggested:lines from package install.