Module Sarek_vulkan

module Sarek_ir_glsl : sig ... end
module Shaderc : sig ... end
module Vulkan_api : sig ... end
module Vulkan_api_barrier : sig ... end

Global 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 ... end
module Vulkan_api_batch : sig ... end

Recording, 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 ... end
module Vulkan_api_event : sig ... end
module Vulkan_api_host : sig ... end

Pinned and registered host memory (specs/vulkan-async-api.md).

module Vulkan_api_host_ffi : sig ... end

VK_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 ... end
module Vulkan_api_memory : sig ... end
module Vulkan_api_pools : sig ... end

Descriptor 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 ... end

Deferred 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 ... end

State 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 ... end

Streams (specs/vulkan-async-launches.md).

module Vulkan_api_transfer : sig ... end

Ranged host<->device copies (specs/vulkan-async-api.md).

module Vulkan_bindings : sig ... end
module Vulkan_error : sig ... end
module Vulkan_host_import_policy : sig ... end

Policy for importing host memory into a Vulkan device (Sarek #503).

module Vulkan_plugin : sig ... end
module Vulkan_plugin_base : sig ... end
module Vulkan_types : sig ... end