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>
21 lines
1.2 KiB
Text
21 lines
1.2 KiB
Text
# ============================================================================
|
|
# 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"
|