Sarek_vulkanmodule Sarek_ir_glsl : sig ... endmodule Shaderc : sig ... endmodule Vulkan_api : sig ... endmodule Vulkan_api_barrier : sig ... endGlobal memory barriers recorded into command buffers. Vulkan orders the start of commands in a queue, not their memory: every producer/consumer pair below needs one. The first scope of a barrier includes every command submitted to the queue before it, so a barrier at the head of a command buffer also orders it after earlier submissions.
module Vulkan_api_base : sig ... endmodule Vulkan_api_batch : sig ... endRecording, submitting and completing launch batches (specs/vulkan-async-launches.md). Every function that takes a stream runs with stream.device.batch_lock held, except try_release_idle, which takes it with try_lock.
module Vulkan_api_device : sig ... endmodule Vulkan_api_event : sig ... endmodule Vulkan_api_host : sig ... endPinned and registered host memory (specs/vulkan-async-api.md).
module Vulkan_api_host_ffi : sig ... endVK_EXT_external_memory_host: structures and entry points for importing a range of host memory as device memory (specs/vulkan-async-api.md).
module Vulkan_api_kernel : sig ... endmodule Vulkan_api_memory : sig ... endmodule Vulkan_api_pools : sig ... endDescriptor pools of one launch-batch slot. A set allocated here stays valid until reset, which the owner calls only after the fence of the command buffer that bound the sets has been waited for.
module Vulkan_api_release : sig ... endDeferred release of device buffers, and the allocation retry that depends on it. free runs from Gc.finalise finalisers (Gpu_memory.register_finalizer), which OCaml 5 runs at any allocation point of any domain, even inside batch_lock or queue_lock. A free therefore never submits, records, waits or consumes an error, and never blocks on the batch or queue lock: it queues its release (lock-free) and asks the stream layer to run the queue if the device is idle, which takes the batch lock with try_lock only. The stream registry snapshot it needs uses a short mutex never held across a blocking call; re-entry on it from a finaliser raises, is caught here, and leaves the release queued. A queue that stays non-empty is run at the next drain, idle Stream.synchronize, allocation failure, device destroy, or at the next launch once it is over its bounds (see Vulkan_api_batch.settle).
module Vulkan_api_slot : sig ... endState of the launch batches: a stream's two command-buffer slots, the per-device registry of streams, and the helpers that need no queue access (specs/vulkan-async-launches.md).
module Vulkan_api_stream : sig ... endStreams (specs/vulkan-async-launches.md).
module Vulkan_api_transfer : sig ... endRanged host<->device copies (specs/vulkan-async-api.md).
module Vulkan_bindings : sig ... endmodule Vulkan_error : sig ... endmodule Vulkan_host_import_policy : sig ... endPolicy for importing host memory into a Vulkan device (Sarek #503).
module Vulkan_plugin : sig ... endmodule Vulkan_plugin_base : sig ... endmodule Vulkan_types : sig ... end