diff --git a/CHANGELOG.md b/CHANGELOG.md index e21d5931..60121aeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,34 @@ change type. Preview the next one with `ludic dev release --dry-run`. A released section may carry a hand-written summary paragraph above its groups (v0.2.0 has one); the generated bullets below it are not edited by hand. +## v0.15.0 — 2026-09-15 + +### Features + +- Vulkan for Ludic, and the start of a second renderer beside OpenGL. + + - **`Vk.*`**: every command of Vulkan 1.0-1.4 and of the extensions a modern renderer is + built around (swapchain, HDR colour spaces, ray query and acceleration structures, opacity + micromaps, mesh shaders, variable rate shading, memory budget, pipeline libraries, NVIDIA + low latency, portability for MoltenVK), with every constant and every struct's size + (`_sizeof`) and field offsets (`_`). Generated from the Vulkan + registry by **`ludic-dev vkgen`** into `runtime/native/vk_api.ludic` and `vk_thunks.ll`; + structs are plain memory filled by name with `Vk.put_i32` / `put_i64` / `put_ptr`. Every + size and offset was checked against the SDK's C headers (3128 facts). A C float is float + bits in an int; 64-bit values and non-dispatchable handles are `long`. + - **The loader is opened at run time**, never linked: `vk_win.ll` (`vulkan-1.dll`) and + `vk_mac.ll` (`libvulkan.1.dylib`, MoltenVK). `Vk.open()` returning 0 means no Vulkan, and + the program carries on. `ludicc` and `ludic build` link both files for any program that + uses `Vk.*`. + - `examples/rendering/vk_probe.ludic` reports what a machine's Vulkan can do; + `vk_compute.ludic` runs a Slang compute shader (`vk_compute.slang`) and reads the picture + back - on an RTX 3070 Ti and on an M4 Pro through MoltenVK, clean under the validation layer. + - **render3d `gpu.ludic`**: the seam between the renderer and a graphics API. Render state + and uniforms go through `gpu_*` / `u_*` and nowhere else (OpenGL frames unchanged); + `R3D_GFX=gl|vk` or `gpu_request` chooses a backend, falling back to OpenGL with a reason; + `gpu_caps_probe()` detects, on Windows, the Vulkan 1.3 floor, ray tracing, mesh shaders, + the NVIDIA RTX generation, Reflex and HDR, for a settings screen to grey out what a machine + cannot use (`R3D_CAPS=rtx50|rtx40|rtx30|amd|intel|none` pretends, for tests). ## v0.14.2 — 2026-09-14 ### Fixes diff --git a/VERSION b/VERSION index e867cc2a..a5510516 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.14.2 +0.15.0 diff --git a/changes/render3d-gpu-layer.md b/changes/render3d-gpu-layer.md deleted file mode 100644 index b88cc183..00000000 --- a/changes/render3d-gpu-layer.md +++ /dev/null @@ -1,26 +0,0 @@ -bump: minor -type: feat -Vulkan for Ludic, and the start of a second renderer beside OpenGL. - -- **`Vk.*`**: every command of Vulkan 1.0-1.4 and of the extensions a modern renderer is - built around (swapchain, HDR colour spaces, ray query and acceleration structures, opacity - micromaps, mesh shaders, variable rate shading, memory budget, pipeline libraries, NVIDIA - low latency, portability for MoltenVK), with every constant and every struct's size - (`_sizeof`) and field offsets (`_`). Generated from the Vulkan - registry by **`ludic-dev vkgen`** into `runtime/native/vk_api.ludic` and `vk_thunks.ll`; - structs are plain memory filled by name with `Vk.put_i32` / `put_i64` / `put_ptr`. Every - size and offset was checked against the SDK's C headers (3128 facts). A C float is float - bits in an int; 64-bit values and non-dispatchable handles are `long`. -- **The loader is opened at run time**, never linked: `vk_win.ll` (`vulkan-1.dll`) and - `vk_mac.ll` (`libvulkan.1.dylib`, MoltenVK). `Vk.open()` returning 0 means no Vulkan, and - the program carries on. `ludicc` and `ludic build` link both files for any program that - uses `Vk.*`. -- `examples/rendering/vk_probe.ludic` reports what a machine's Vulkan can do; - `vk_compute.ludic` runs a Slang compute shader (`vk_compute.slang`) and reads the picture - back - on an RTX 3070 Ti and on an M4 Pro through MoltenVK, clean under the validation layer. -- **render3d `gpu.ludic`**: the seam between the renderer and a graphics API. Render state - and uniforms go through `gpu_*` / `u_*` and nowhere else (OpenGL frames unchanged); - `R3D_GFX=gl|vk` or `gpu_request` chooses a backend, falling back to OpenGL with a reason; - `gpu_caps_probe()` detects, on Windows, the Vulkan 1.3 floor, ray tracing, mesh shaders, - the NVIDIA RTX generation, Reflex and HDR, for a settings screen to grey out what a machine - cannot use (`R3D_CAPS=rtx50|rtx40|rtx30|amd|intel|none` pretends, for tests).