feat(vk): Vk.* - Vulkan 1.0-1.4 generated from the registry, loaded at run time
ludic-dev vkgen reads vk.xml into runtime/native/vk_api.ludic (constants, every struct's <Struct>_sizeof and <Struct>_<field> offsets, one extern per command) and vk_thunks.ll. Every size and offset was compiled against the SDK's C headers; `ludic-dev test` checks the tracked files against the registry wherever the Vulkan SDK is installed. vk_win.ll (vulkan-1.dll) and vk_mac.ll (libvulkan.1.dylib, MoltenVK) open the loader at run time, so a program built with Vk.* starts on a machine without Vulkan. ludicc and ludic build link both for any program that uses Vk.*. The seeds are regenerated for the new compiler. vk_probe reports what a machine's Vulkan can do; vk_compute dispatches a Slang compute shader and reads the picture back, clean under the validation layer on an RTX 3070 Ti and on an M4 Pro through MoltenVK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
043d8d81a2
commit
208cad7ca1
18 changed files with 52468 additions and 40972 deletions
21
runtime/native/vk.ludic
Normal file
21
runtime/native/vk.ludic
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# ============================================================================
|
||||
# vk.ludic — Vk.*: Vulkan for Ludic.
|
||||
#
|
||||
# Every command of Vulkan 1.0-1.4 and of the extensions the render3d Vulkan renderer
|
||||
# is built around is bound in vk_api.ludic (generated by `ludic-dev vkgen` from the
|
||||
# Vulkan registry), with every constant and every struct's size and field offsets.
|
||||
# Vk.<snake_name>(...) calls one: Vk.create_instance(info, null, out). Structs are
|
||||
# plain memory filled by field name:
|
||||
# let ci = bytes(VkInstanceCreateInfo_sizeof)
|
||||
# Vk.zero(ci, VkInstanceCreateInfo_sizeof)
|
||||
# Vk.put_i32(ci, VkInstanceCreateInfo_sType, VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
|
||||
#
|
||||
# Numbers: a C float is float bits in an int; uint64_t, VkDeviceSize and
|
||||
# non-dispatchable handles are `long`. A negative long has to come from a `long`
|
||||
# variable - an int literal passed straight to a long parameter is zero-extended.
|
||||
#
|
||||
# The loader is opened at run time by Vk.open() (vk_win.ll / vk_mac.ll), never
|
||||
# linked: 0 means this machine has no Vulkan, and the program carries on without it.
|
||||
# ============================================================================
|
||||
|
||||
import "vk_api.ludic"
|
||||
Loading…
Add table
Add a link
Reference in a new issue