Releases: vKexterPLv/Vulkan-Core-Kit
v0.3.3 — test-harness fix
Fixed
tests/test_r11_r12_reliability.cpp— direct include oflayers/execution/VCKExecution.h. That header forward-usesVulkanDevice/VulkanCommand/VulkanSyncwithout including their core headers, so it only compiles when the umbrella has already pulled them in. Switched the include toVCK.hto match the working tests. CI broke on all 4 jobs (Linux / macOS / Windows MinGW / Windows MSVC) on the post-merge run of v0.3.2.tests/test_r19_r15_r16_cost_scope.cpp— usedVCK::Test::LogCapturewithoutvck_log_capture.h. Added the include.tests/test_vckmath.cpp—Mat4access mismatch.Mat4storesfloat m[16]flat (column-major) with anAt(row, col)accessor; the tests indexed it asm[col][row]. Switched toAt(row, col).tests/test_vckmath.cpp—lookat_z_axis_points_to_targetasserted positive view-space Z. VCK is right-handed (the third row ofLookAtnegatesf, matching thePerspectiveconvention which negateszintow), so a target one unit ahead at world(0, 0, -1)lands at view-spacez = -1. Fixed assertion.
Notes
v0.3.3 is a test-harness fix release on top of v0.3.2 — no library code changed, no behaviour change. If your tree was on v0.3.2 with green CI on PR #8, you don't need to take this; it only matters for the maintainer's a9f3e92 "Moar tests" commit that landed post-merge.
v0.3.2 — bug audit + de-AI rewrite
Fixed
- VMM
SubmitStagingCmd— uncheckedvkEndCommandBuffer. If End failed, the staging cmd was malformed, the nextvkQueueSubmitwould VUID-fail, AND any pending acquire barriers would issue layout transitions against resources still inUNDEFINED(the release halves never actually ran). VUID-VkImageMemoryBarrier-oldLayout-01197. Now bails with cmd-buffer free + dropsm_PendingAcquire{Buffers,Images}. - VMM cross-family acquire path — unchecked
vkBeginCommandBuffer/vkEndCommandBuffer. Recording into a not-begun cmd is undefined; submitting a not-ended cmd is a VUID violation. Both nowVK_CHECKand bail with cmd-free + pending-acquire drop on failure. - VMM cross-family acquire path — fence path could silently skip the submit. If
vkCreateFenceor the fencedvkQueueSubmitfailed, the acquire barriers never ran, leaving resources stranded in "released to graphics family with no matching acquire" state (UB per spec §7.7.4). Added avkQueueWaitIdle-based fallback so the acquire submit always actually runs (matches the staging fallback). - Swapchain
CreateSwapchain— uncheckedvkCreateSwapchainKHRand bothvkGetSwapchainImagesKHR. Continuing past these on failure left a half-built swapchain; now returns false on device-lost so the caller can teardown (rule 14). VulkanOneTimeCommand::Begin— leaked the allocated cmd buffer whenvkBeginCommandBufferfailed.m_Cmdstayed populated so the caller couldn't tell Begin failed; a laterEnd()would VUID-fail on a never-begun cmd, or never get called and the allocation leaked until pool teardown. Free + zerom_Cmdon Begin failure.
Build
.spvoutputs no longer tracked.glslangValidatorregenerates them on every build and bytes differ across glslang versions, so tracking them dirtied every local build against a CI-built tree. Added to.gitignore.
Documentation
- De-AI rewrite pass. Every comment, doc, README, and CONTRIBUTING that read like marketing copy got the AI tells removed (no more "leverages", "seamlessly", "robust", "this ensures"). Voice is terser, comments explain why not what, README leads with a 3-line elevator pitch, CONTRIBUTING has opinions. Technical accuracy preserved; only the voice changed.
- CHANGELOG, VCK.h header block, and
docs/*.mdresynced to v0.3.2 state. - Wiki tarball rebuilt:
VCK.wiki.v0.3.2.tar.gz.
v0.3.1 — CMake + R23/R24 + extension matrix
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.
v0.2.1 — Ergonomic shader API
Added
- Rules 18-22 in
docs/Design.md:- R18 External synchronisation — codifies Vulkan's per-handle external-sync requirement;
JobGraphis the one exception. - R19 Zero cost for unused features — un-
Initialized modules allocate nothing, spawn no thread, emit no log line. - R20 Every public API has an example — public classes in
VCK.hmust be exercised by at least one example underexample/. - R21
VCK.his the API surface — layer headers are implementation detail; breaking changes toVCK.hbump the minor version until v1.0.0. - R22 VCK never owns user handles — completes rule 9; VCK destroys only handles it created.
- R18 External synchronisation — codifies Vulkan's per-handle external-sync requirement;
VCKMath.h—Vec2/Vec3/Vec4/Mat4POD structs, free-functionTranslate/Rotate/Scale/Perspective/LookAt/Radians/Degrees. No templates, no SIMD, row-major.VertexLayout— fluentAdd(name, VertexAttrType)→Binding(0)+Attributes()builder; returns plainVkVertexInput*structs the caller hands toVulkanModelPipeline(rule 22, no ownership).PushConstants—Declare(name, type)cold path,Set(name, value)+Apply(cb, layout, stages)hot path. Name → offset resolved atDeclare; no hashing /std::any/std::variantin the hot path.Primitives::Cube/Plane/Sphere/Quad/Line— return-by-valueMesh { positions, normals, uvs, indices }. Shrinks cube setup from ~40 lines of vertex tables to one call.DebugTimeline::DumpChromeTracing(path)— emits a Chrome-tracing JSON array you can load inchrome://tracingorui.perfetto.dev. No viewer bundled.- New example
[10] DebugShowcaseExample— guided tour of everyVCKLoglevel,cfg.debuggating, dedup,VK_CHECKfail-loud path, GPU / driver / memory / surface dump. No draw loop. - New example
[11] AAShowcaseExample—DetectRecommendedAAdecision matrix acrossforwardRenderer×supportsMotionVectors, live swapchain auto-pick echoed viaGetAATechnique()+GetMSAASamples(), RGB triangle drawn with the picked AA. - New example
[12] EasyCubeExample—Primitives::Cube()+VertexLayout+PushConstants+VCKMathin one screen. Rule 20 parity for the v0.2.1 ergonomic API. - Wiki
Cookbook— one-stop recipe book: image / OBJ / cube / text / line / circle / FXAA / SMAA / TAA skeletons / ImGui bootstrap / offscreen PNG readback.
Changed
- Rule 14 tightened — now explicitly requires
VCKLog::Errorwith a subsystem tag on every failure; areturn falsewithout a matchingErroris a bug. VulkanModelPipeline::Initialize(4-arg overload) emitsVCKLog::Warnwhen called; the hardcodedVK_SAMPLE_COUNT_1_BITis hazardous when the render pass uses MSAA. Use the 5-arg overload and passswapchain.GetMSAASamples().build.bat/build.sh— menu grew to[1]-[12].
Fixed
- Top-left quadrant rendering in
MipmapExample+VMMExample— caused by pipeline-vs-render-pass sample-count mismatch (pipeline was 1x, render pass was MSAA 4x — undefined per spec, on NVIDIA confines rasterisation to the top-left quadrant). Both examples now passswapchain.GetMSAASamples()to the 5-argVulkanModelPipeline::Initialize. - Windows ANSI colour output —
VCKLog::Init()now callsSetConsoleModewithENABLE_VIRTUAL_TERMINAL_PROCESSINGonce on startup so Windows CMD renders colours instead of←[96mliterals. build.batline endings —.gitattributesforces CRLF on*.batso Windows CMD stops fragmenting comment lines into garbage tokens.EasyCubeExamplesizeofbug —VulkanMesh::Uploadtakes total byte count, not per-vertex stride; was uploading 1 of 24 vertices.DebugTimeline::DumpChromeTracingunderflow guard —endUs - startUsnow matchesDump()'sendUs > startUs ? endUs - startUs : 0pattern.
v0.1.0 — Vulkan Core Kit
The first release under the VCK name. Project was rebranded from VVCS
("Vulkan-VCS") to VCK — Vulkan Core Kit in commit deced77. This
release establishes the public surface (VCK.h amalgam header), the
three-layer architecture (core / expansion / execution), the in-tree
example builder (build.bat + ANSI menu), the structured logger, and
a Windows CI gate. The project is Windows-only at this point;
cross-platform support lands in v0.2.0.
Added
- Project rebrand —
VVCS → VCK (Vulkan Core Kit). README, build
scripts, header guards, and namespaceVCK::finalised. VCK.hamalgam header — single public include surface; per-class
declarations stop being duplicated and the amalgam now#includes
the layer headers directly (rule 21 precursor).- Three-layer architecture —
core/(VulkanContext,
VulkanDevice,VulkanSwapchain,VulkanPipeline,
VulkanCommand,VulkanSync,VulkanBuffer,VulkanImage,
VulkanHelpers), expansion (framebuffers, depth, samplers,
textures, model pipelines, descriptor sets, mipmaps), execution
(FrameScheduler,JobGraph,GpuSubmissionBatcher,
BackpressureGovernor,DebugTimeline,TimelineSemaphore). VCK::Configmaster init-chain control struct —cfg.device,
cfg.swapchain,cfg.pipeline,cfg.scheduler,cfg.aa,cfg.debug
knobs; passed once toVulkanContext::Initialize.VulkanPipeline::Config— cull mode, front-face winding, blend
state, push-constant ranges, descriptor-set layouts.- Mailbox present mode by default with FIFO fallback when the
surface doesn't expose Mailbox. - Six VCKExpansion examples —
HelloExample,ModelExample,
VMMExample,FrameSchedulerExample,TripleBufferExample,
LockstepExample, plus three execution-layer examples
(SubmissionBatchingExample,JobGraphExample,
DebugTimelineExample). example/build.bat— Windows MinGW builder with[1]-[9] / [A] / [0]
ANSI-coloured menu, BUILD_ALL section that compiles every example in
one pass, and CRLF-safe shader compile viaglslangValidator.- VMM (Vulkan Memory Manager) — three-layer allocator
(VmmPersistent/VmmTransient/VmmStaging) wrapping VMA's
pool-aware allocators.VmmBuffer/VmmImageare typed
POD-by-handle wrappers.LogStatsdump every N frames for the
example. VCKLog— coloured[VCK] [Tag] bodylogger withInfo/
Notice/Warn/Errorlevels and an init-time global toggle
for debug-gatedInfolines.docs/at repo root — split out from README into
Build.md,Examples.md,Design.md,Home.md. README slimmed to
badges + 60-second tour + pointers.- GitHub wiki — initial structure;
_Sidebar.md, design rules. - CI: Windows workflow —
.github/workflows/build.ymlruns
build.bat Aonwindows-latestfor every push / PR. SDK installervk_video/*.hsparse-checkout patch (the LunarG installer's
vulkan_videocomponent is optional butvulkan_core.hhard-includes
it).
.gitattributes— forces CRLF on*.batso Windows CMD doesn't
fragment comment lines into garbage tokens.
Changed
build.batredesigned with an ANSI UI;chcp 65001for UTF-8;
em-dashes scrubbed from console-bound strings (CMD prints them as?
on default codepages).AllocConsoleremoved in favour of g++'s default
console-subsystem stdout — no flicker on launch, no leftover console
if the program crashes.VulkanContext::Initializedrops the leftover
BuildRequiredExtensionshelper (Win32-only dead code with no header
declaration).
Fixed
- VMM lifecycle bugs — wrong destruction order between
VmmTransientring slots andVmmStagingwas leaking allocations
onShutdown. Routed VMM logs to a Windows console. FrameSchedulerLockstep + AsyncMax deadlocks — Lockstep was
waiting on the slot fence before signalling the previous frame's
release; AsyncMax could double-acquire the same slot under contention.build.batBUILD_ALL trailing whitespace inset EX=...causing
the all-build pass to skip examples whose name had a trailing space.- MinGW compile —
SubmitInfoandVCK::Configneed explicit
default ctors; gcc 13 wouldn't aggregate-init through inheritance. JobGraph::Add— counted invalid (out-of-range) deps toward the
job's wait count, soExecute()could deadlock waiting for a job that
would never run.VCKExpansion.h— forward-declaredVulkanDepthBufferbefore
VulkanFramebufferSet(compile order fix).HelloExample— quad winding flipped so the embedded "Hello,
World" text isn't back-face culled.
v0.3.0 — runtime-vkDeviceWaitIdle-is-gone
The runtime-vkDeviceWaitIdle-is-gone release. Multi-queue, timeline-driven, fence-honest.
Merged via PR #4 (commit ee29ea6).
CI: green on the Windows runner (build.bat [A] — all 13 examples).
Added
- Dedicated compute + transfer queues.
VulkanDevice::FindQueueFamiliespicks compute-only and transfer-only families when the vendor exposes them (AMD / NVIDIA almost always; Intel iGPUs often don't). Fallback to graphics is logged viaVCKLog::Notice. - Timeline semaphore feature chain.
VulkanDevice::InitializeenablesVK_KHR_timeline_semaphorewhen the adapter supports it.VulkanDevice::HasTimelineSemaphores()reports the capability. FrameSchedulerowns one timeline.EndFramesignals a monotonic per-slot value;BeginFramewaits with onevkWaitSemaphores. Per-slot fences kept as a fallback.FrameScheduler::FrameTimeline()/SlotToken(slot)/DrainInFlight(). Public timeline accessors + scheduler-owned full drain that doesn't touch the device globally.- Scheduler-aware
HandleLiveResize. Drains viaDrainInFlight(), recreates the swapchain withdrainedExternally=true, leaves independent compute / transfer work alone during resize. - Secondary command buffer API.
VulkanCommand::AllocateSecondary/FreeSecondary/BeginSecondary(cb, inheritance)/EndSecondary/ExecuteSecondaries(primary, …). Caller serialises pool access (rule 18). - VMM cross-family staging. When the transfer family differs from graphics, VMM records a release barrier on transfer, waits on the per-submit fence, then records an acquire barrier on graphics (Vulkan §7.7.4).
VMMper-submit fence.SubmitStagingCmdno longer callsvkQueueWaitIdle.Config::DeviceCfgknobs.enableTimelineSemaphores,enableDedicatedComputeQueue,enableDedicatedTransferQueue(rule 19 — zero cost when off).- Example [13]
SecondaryCmdExample. Per-slot secondary re-recorded each frame; primary opens the render pass withVK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS. Uses scheduler-aware resize. - Example [12]
EasyCubeExample. Cube viaPrimitives::Cube()+VertexLayout+PushConstants+VCKMath(carried over from v0.2.1). docs/Overview.md. One-page tour: what VCK is / gives / never takes / modern v0.3 optimisations / why it's fresh / honest pick-vs-no-pick summary.- Rules 18–22. External synchronisation, zero-cost-for-unused, example parity, ABI stability (
VCK.his the surface), no ownership of user handles.
Changed
- Rule 4 allow-list. Only
Shutdown()paths may callvkDeviceWaitIdle. Concrete blocking sites:OneTimeCommand::End,VMM::SubmitStagingCmd,FrameScheduler::WaitInFlightFence(timeline or fence),DrainInFlight,BackpressureGovernor::WaitIfOverrun,Swapchain::Recreatedefault fallback (scheduler-aware path passesdrainedExternally=true). - Rule 14 tightened. Every failure returns an explicit
boolAND logs viaVCKLog::Error(\"<subsystem>\", …). Silentfalseis a bug. - Logging. All
LogVkcall sites migrated toVCKLog::{Info,Notice,Warn,Error}. build.bat/build.sh. Menus run[1]–[13],[A]builds all.VCK.h. Repository layout, class index, config knobs, and.cppfunction indexes synced to v0.3 surface (rule 21).
Fixed
VulkanOneTimeCommand::Endno longer hangs whenvkQueueSubmitfails (short-circuiting fence wait + warn-fallback path).- VMM staging cmd buffer now allocated from a transfer-family pool (was: graphics pool submitted to transfer queue, spec violation).
- VMM fallback path now wraps
vkQueueSubmit/vkQueueWaitIdleinVK_CHECK(rule 14). - VMM no longer records acquire barriers when the matching transfer submit failed (no more stale
oldLayout=TRANSFER_DST_OPTIMALonUNDEFINEDimages). VulkanDevice::Shutdownnullsm_ComputeQueue/m_TransferQueueso post-shutdown getters fall through to the nulled graphics queue.FrameScheduler::WaitInFlightFencetimeline path now resets the first-frameVK_FENCE_CREATE_SIGNALED_BITfence (avoidsVUID-vkQueueSubmit-fence-00064on first pass per slot).SecondaryCmdExample::Run()matches the established `if (window.IsMinimized()) { window.WaitEvents(); continue; }` pattern.
Compatibility
VulkanSwapchain::Recreategained an optionaldrainedExternally=falseparameter; existing call sites keep their behaviour.- Legacy
HandleLiveResizeoverloads kept (still callvkDeviceWaitIdle); the scheduler-aware overload is the recommended v0.3 path. - Dedicated compute / transfer queues default ON; opt out via
cfg.device.enableDedicated*Queue = false.
Where to start
- New? Read
docs/Overview.md(10 min), thenHello VCK. - Upgrading from v0.2.x? Migrate
LogVkcallers toVCKLog::*; switchHandleLiveResizecallers that own aFrameSchedulerto the scheduler-aware overload; opt into dedicated queues / timeline by leaving the newDeviceCfgknobs at their defaulttrue. - Auditing? All 22 rules in
docs/Design.md. Allow-list lives in rule 4; status / caveats / roadmap track shipped vs deferred.
v0.2.0 — Cross-platform
Added
- Cross-platform support (Windows / Linux / macOS) via
VCK::Window+VCKCrossplatformfacade over GLFW.VCK_PLATFORM_WINDOWS/LINUX/MACOSmacros gate platform includes. example/build.sh— Linux + macOS builder with the same[1]-[9] / [A] / [0]menu asbuild.bat; auto-detects OS, usespkg-configfor Vulkan + GLFW.- Live resize as first-class —
VCK::HandleLiveResize(window, dev, sc, fb, pipe[, depth])handles any OS resize (720p ↔ 4K) in one call per frame. Timeline-aware overloads inlayers/execution/emit aDebugTimelineCPU span (rule 12). - Anti-aliasing framework —
VCK::AATechniqueenum (Auto, Off, MSAA, MSAA_A2C, SampleRate, FXAA, SMAA_1x, SMAA_T2x, TAA, TAAU).cfg.aa.technique = AATechnique::Autoruns a 5-step decision tree atVulkanSwapchain::Initialize. Sample-based techniques implemented pipeline-side; post-process names returned viaswapchain.GetAATechnique()for renderer to implement (rules 15/16). VCK::VCKLogstructured logger —Info(debug-gated) /Notice/Warn/Error. Console-spam dedup of identical consecutive(tag, body)lines. Classify helper parses legacyLogVk("[Tag] body")into the new levels.cfg.debugflag (defaultfalse) —VulkanContext::Initializewires it intoVCKLog::SetDebug().cfg.pipeline.alphaToCoverage— flipsalphaToCoverageEnablein pipeline multisample state.cfg.pipeline.sampleRateShading+minSampleShading— enables per-sample shading.- Repo reorganisation:
layers/{core,expansion,execution,vmm}/+vendor/{vulkan_headers,glfw,vma}/.VCK.hat root is the single source of truth for API documentation. - Wiki —
Hello-VCK.md(per-line walkthrough targeting 1-hour onboarding budget),_Sidebar.md(navigation). LICENSE,CHANGELOG.md,CONTRIBUTING.md,.editorconfig,.gitignoreat repo root.
Changed
VK_CHECKnow routes failures directly toVCKLog::Error(…)instead of the debug-gatedLogVk(…)— fail loud regardless ofcfg.debug(rule 14 fix).VulkanContext::InitializetakesVCK::Window&(wasHWNDon Windows only); raw-handle overload preserved as escape hatch (rule 9).<windows.h>/<vulkan_win32.h>guarded behindVCK_PLATFORM_WINDOWSinVulkanHelpers.handVCK.h— no more platform leakage in the public surface.docs/Design.mdrule 4 allow-list updated to includeVulkanSwapchain::RecreateandHandleLiveResizevkDeviceWaitIdlecalls.- Examples 1-9 ported to
VCK::Window+VCK::HandleLiveResize— dropped rawGLFWwindow*,HWND,g_Resized,g_Minimized,OnFramebufferResize.
Removed
core/VulkanHelpers.cpp(empty shell).core/at repo root (moved tolayers/core/).VMM/at repo root (moved tolayers/vmm/).BuildRequiredExtensionshelper inVulkanContext.cpp(dead code from pre-crossplatform era, no matching header decl).