# Interface VulkanLogicalDeviceType

All Superinterfaces:
  `AutoCloseable, com.io7m.jmulticlose.core.CloseableType, VulkanHandleDispatchableType, VulkanHandleType`

All Known Implementing Classes:
  `VulkanLWJGLLogicalDevice`

public interface VulkanLogicalDeviceType extends VulkanHandleDispatchableType
A reference to a logical Vulkan device.

See Also:
  - "VkDevice"

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Interface
  Description
  `static enum`
  `VulkanLogicalDeviceType.VulkanEventStatus`
  The status of an event.
  `static enum`
  `VulkanLogicalDeviceType.VulkanFenceStatus`
  The status of an event.
  `static enum`
  `VulkanLogicalDeviceType.VulkanPipelineCacheDataResult`
  The result of fetching data for a pipeline cache.
  `static enum`
  `VulkanLogicalDeviceType.VulkanWaitStatus`
  The result of waiting.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `List<VulkanDescriptorSetType>`
  `allocateDescriptorSets(VulkanDescriptorSetAllocateInfo info)`
  Allocate descriptor sets.
  `VulkanDeviceMemoryType`
  `allocateMemory(VulkanMemoryAllocateInfo info)`
  Allocate device memory.
  `void`
  `bindBufferMemory(VulkanBufferType buffer, VulkanDeviceMemoryType device_memory, long offset)`
  Bind device memory to a buffer object.
  `void`
  `bindImageMemory(VulkanImageType image, VulkanDeviceMemoryType device_memory, long offset)`
  Bind device memory to a image object.
  `void`
  `close()`
  Destroy the object.
  `default VulkanSemaphoreBinaryType`
  `createBinarySemaphore()`
  Create a binary semaphore.
  `VulkanSemaphoreBinaryType`
  `createBinarySemaphore(VulkanSemaphoreBinaryCreateInfo info)`
  Create a binary semaphore.
  `VulkanBufferType`
  `createBuffer(VulkanBufferCreateInfo create_info)`
  Create a buffer.
  `VulkanBufferViewType`
  `createBufferView(VulkanBufferViewCreateInfo info)`
  Create an buffer view.
  `default VulkanCommandBufferType`
  `createCommandBuffer(VulkanCommandPoolType pool, VulkanCommandBufferLevel level)`
  Create a command buffer.
  `List<VulkanCommandBufferType>`
  `createCommandBuffers(VulkanCommandBufferCreateInfo create_info)`
  Create a command buffer.
  `VulkanCommandPoolType`
  `createCommandPool(VulkanCommandPoolCreateInfo create_info)`
  Create a command pool.
  `default VulkanPipelineType`
  `createComputePipeline(VulkanComputePipelineCreateInfo pipeline_info)`
  Create a compute pipeline.
  `default VulkanPipelineType`
  `createComputePipeline(VulkanPipelineCacheType cache, VulkanComputePipelineCreateInfo pipeline_info)`
  Create a compute pipeline.
  `default VulkanPipelineType`
  `createComputePipeline(Optional<VulkanPipelineCacheType> pipeline_cache, VulkanComputePipelineCreateInfo pipeline_info)`
  Create a compute pipeline.
  `default List<VulkanPipelineType>`
  `createComputePipelines(VulkanPipelineCacheType pipeline_cache, List<VulkanComputePipelineCreateInfo> pipeline_infos)`
  Create a set of compute pipelines.
  `default List<VulkanPipelineType>`
  `createComputePipelines(List<VulkanComputePipelineCreateInfo> pipeline_infos)`
  Create a set of compute pipelines.
  `List<VulkanPipelineType>`
  `createComputePipelines(Optional<VulkanPipelineCacheType> pipeline_cache, List<VulkanComputePipelineCreateInfo> pipeline_infos)`
  Create a set of compute pipelines.
  `VulkanDescriptorPoolType`
  `createDescriptorPool(VulkanDescriptorPoolCreateInfo info)`
  Create a descriptor pool.
  `VulkanDescriptorSetLayoutType`
  `createDescriptorSetLayout(VulkanDescriptorSetLayoutCreateInfo info)`
  Create a descriptor set layout.
  `VulkanEventType`
  `createEvent(VulkanEventCreateInfo create_info)`
  Create an event.
  `default VulkanFenceType`
  `createFence()`
  Create a fence.
  `VulkanFenceType`
  `createFence(VulkanFenceCreateInfo createInfo)`
  Create a fence.
  `VulkanFramebufferType`
  `createFramebuffer(VulkanFramebufferCreateInfo create_info)`
  Create a framebuffer.
  `default VulkanPipelineType`
  `createGraphicsPipeline(VulkanGraphicsPipelineCreateInfo pipeline_info)`
  Create a graphics pipeline.
  `default VulkanPipelineType`
  `createGraphicsPipeline(VulkanPipelineCacheType cache, VulkanGraphicsPipelineCreateInfo pipeline_info)`
  Create a graphics pipeline.
  `default VulkanPipelineType`
  `createGraphicsPipeline(Optional<VulkanPipelineCacheType> pipeline_cache, VulkanGraphicsPipelineCreateInfo pipeline_info)`
  Create a graphics pipeline.
  `default List<VulkanPipelineType>`
  `createGraphicsPipelines(VulkanPipelineCacheType pipeline_cache, List<VulkanGraphicsPipelineCreateInfo> pipeline_infos)`
  Create a set of graphics pipelines.
  `default List<VulkanPipelineType>`
  `createGraphicsPipelines(List<VulkanGraphicsPipelineCreateInfo> pipeline_infos)`
  Create a set of graphics pipelines.
  `List<VulkanPipelineType>`
  `createGraphicsPipelines(Optional<VulkanPipelineCacheType> pipeline_cache, List<VulkanGraphicsPipelineCreateInfo> pipeline_infos)`
  Create a set of graphics pipelines.
  `VulkanImageType`
  `createImage(VulkanImageCreateInfo create_info)`
  Create an image.
  `VulkanImageViewType`
  `createImageView(VulkanImageViewCreateInfo info)`
  Create an image view.
  `VulkanPipelineCacheType`
  `createPipelineCache(VulkanPipelineCacheCreateInfo pipeline_info)`
  Create a pipeline cache.
  `VulkanPipelineLayoutType`
  `createPipelineLayout(VulkanPipelineLayoutCreateInfo info)`
  Create a pipeline layout.
  `VulkanQueryPoolType`
  `createQueryPool(VulkanQueryPoolCreateInfo create_info)`
  Create a query pool.
  `VulkanRenderPassType`
  `createRenderPass(VulkanRenderPassCreateInfo render_pass_create_info)`
  Create a render pass.
  `VulkanSamplerType`
  `createSampler(VulkanSamplerCreateInfo create_info)`
  Create a sampler.
  `VulkanShaderModuleType`
  `createShaderModule(VulkanShaderModuleCreateInfo create_info)`
  Create a shader module.
  `default VulkanSemaphoreTimelineType`
  `createTimelineSemaphore(long initialValue)`
  Create a timeline semaphore.
  `VulkanSemaphoreTimelineType`
  `createTimelineSemaphore(VulkanSemaphoreTimelineCreateInfo info)`
  Create a timeline semaphore.
  `VulkanDebuggingType`
  `debugging()`
  `Map<String, VulkanExtensionType>`
  `enabledExtensions()`
  `default <T extends VulkanExtensionType>
  Optional<T>`
  `findEnabledExtension(String name, Class<T> clazz)`
  Find and cast an extension with a given name to the correct API type.
  `default void`
  `flushMappedMemoryRange(VulkanMappedMemoryRange range)`
  Flush mapped memory ranges.
  `void`
  `flushMappedMemoryRanges(List<VulkanMappedMemoryRange> ranges)`
  Flush mapped memory ranges.
  `VulkanDeviceAddress`
  `getBufferDeviceAddress(VulkanBufferType buffer)`
  Retrieve the device address for the given buffer.
  `VulkanMemoryRequirements`
  `getBufferMemoryRequirements(VulkanBufferType buffer)`
  Retrieve the memory requirements for the given buffer.
  `VulkanLogicalDeviceType.VulkanEventStatus`
  `getEventStatus(VulkanEventType event)`
  Retrieve the status of an event object.
  `VulkanLogicalDeviceType.VulkanFenceStatus`
  `getFenceStatus(VulkanFenceType fence)`
  Retrieve the status of a fence object.
  `VulkanMemoryRequirements`
  `getImageMemoryRequirements(VulkanImageType image)`
  Retrieve the memory requirements for the given image.
  `VulkanSubresourceLayout`
  `getImageSubresourceLayout(VulkanImageType image, VulkanImageSubresource image_subresource)`
  Retrieve information about an image subresource.
  `VulkanLogicalDeviceType.VulkanPipelineCacheDataResult`
  `getPipelineCacheData(VulkanPipelineCacheType pipeline_cache, ByteBuffer data)`
  Retrieve the data store for the pipeline cache.
  `long`
  `getPipelineCacheDataSize(VulkanPipelineCacheType pipeline_cache)`
  Retrieve the size of the data store for the pipeline cache.
  `long`
  `getSemaphoreCounterValue(VulkanSemaphoreTimelineType semaphore)`
  Retrieve the current value of a semaphore object.
  `VulkanMappedMemoryType`
  `mapMemory(VulkanDeviceMemoryType memory, long offset, long size, Set<VulkanMemoryMapFlag> flags)`
  Map a memory object into the application address space.
  `void`
  `mergePipelineCaches(List<VulkanPipelineCacheType> caches, VulkanPipelineCacheType output)`
  Combine the data stores of pipeline caches.
  `VulkanPhysicalDeviceType`
  `physicalDevice()`
  `default Optional<VulkanQueueType>`
  `queue(VulkanQueueFamilyIndex queueFamily, VulkanQueueIndex queueIndex)`
  Find the queue with the given queue family and index.
  `List<VulkanQueueType>`
  `queues()`
  `default void`
  `resetCommandPool(VulkanCommandPoolType pool)`
  Reset the given command pool.
  `void`
  `resetCommandPool(VulkanCommandPoolType pool, Set<VulkanCommandPoolResetFlag> flags)`
  Reset the given command pool.
  `default void`
  `resetDescriptorPool(VulkanDescriptorPoolType pool)`
  Reset the given descriptor pool.
  `void`
  `resetDescriptorPool(VulkanDescriptorPoolType pool, Set<VulkanDescriptorPoolResetFlag> flags)`
  Reset the given descriptor pool.
  `void`
  `resetEvent(VulkanEventType event)`
  Reset an event object to non-signaled state.
  `void`
  `resetFences(List<VulkanFenceType> fences)`
  Reset the given fences.
  `void`
  `setEvent(VulkanEventType event)`
  Set an event object to signaled state.
  `void`
  `signalTimelineSemaphore(VulkanSemaphoreTimelineType semaphore, long value)`
  Signal a timeline semaphore.
  `void`
  `updateDescriptorSets(List<VulkanWriteDescriptorSet> descriptor_writes, List<VulkanCopyDescriptorSet> descriptor_copies)`
  Update the contents of a descriptor set object.
  `default VulkanLogicalDeviceType.VulkanWaitStatus`
  `waitForFence(VulkanFenceType fence, long timeout_nanos)`
  Wait for a fence to become signaled.
  `VulkanLogicalDeviceType.VulkanWaitStatus`
  `waitForFences(List<VulkanFenceType> fences, boolean wait_all, long timeout_nanos)`
  Wait for one or more fences to become signaled.
  `default VulkanLogicalDeviceType.VulkanWaitStatus`
  `waitForTimelineSemaphore(VulkanSemaphoreTimelineWait semaphore, long timeoutNanos)`
  Wait for a semaphore to become signaled.
  `VulkanLogicalDeviceType.VulkanWaitStatus`
  `waitForTimelineSemaphores(List<VulkanSemaphoreTimelineWait> semaphores, boolean waitAll, long timeoutNanos)`
  Wait for one or more semaphores to become signaled.
  `void`
  `waitIdle()`
  Wait for this device to become idle.

  ### Methods inherited from interface com.io7m.jmulticlose.core.CloseableType

  `isClosed`

- ## Method Details

  - ### debugging

    VulkanDebuggingType debugging()
    Returns:
      A reference to a possibly no-op debugging interface

  - ### close

    void close() throws VulkanException
    Description copied from interface: `VulkanHandleType`
    Destroy the object.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `VulkanHandleType`
    Throws:
      `VulkanException` - On errors

  - ### physicalDevice

    VulkanPhysicalDeviceType physicalDevice()
    Returns:
      The physical device to which this logical device belongs

  - ### queues

    List<VulkanQueueType> queues() throws VulkanException
    Returns:
      The queues present on the logical device
    Throws:
      `VulkanException` - On errors

  - ### queue

    default Optional<VulkanQueueType> queue(VulkanQueueFamilyIndex queueFamily, VulkanQueueIndex queueIndex) throws VulkanException
    Find the queue with the given queue family and index.
    Parameters:
      `queueFamily` - The queue family
      `queueIndex` - The queue index
    Returns:
      The matching queue, if any
    Throws:
      `VulkanException` - On errors

  - ### enabledExtensions

    Map<String, VulkanExtensionType> enabledExtensions() throws VulkanException
    Returns:
      The enabled extensions for the instance
    Throws:
      `VulkanException` - On errors

  - ### createShaderModule

    VulkanShaderModuleType createShaderModule(VulkanShaderModuleCreateInfo create_info) throws VulkanException
    Create a shader module.
    Parameters:
      `create_info` - The creation info
    Returns:
      A shader module
    Throws:
      `VulkanException` - On errors

  - ### createSampler

    VulkanSamplerType createSampler(VulkanSamplerCreateInfo create_info) throws VulkanException
    Create a sampler.
    Parameters:
      `create_info` - The creation info
    Returns:
      A sampler
    Throws:
      `VulkanException` - On errors

  - ### createBufferView

    VulkanBufferViewType createBufferView(VulkanBufferViewCreateInfo info) throws VulkanException
    Create an buffer view.
    Parameters:
      `info` - The buffer view creation info
    Returns:
      An buffer view
    Throws:
      `VulkanException` - On errors

  - ### createImageView

    VulkanImageViewType createImageView(VulkanImageViewCreateInfo info) throws VulkanException
    Create an image view.
    Parameters:
      `info` - The image view creation info
    Returns:
      An image view
    Throws:
      `VulkanException` - On errors

  - ### findEnabledExtension

    default <T extends VulkanExtensionType> Optional<T> findEnabledExtension(String name, Class<T> clazz) throws VulkanException
    Find and cast an extension with a given name to the correct API type.
    Type Parameters:
      `T` - The precise type
    Parameters:
      `name` - The extension name
      `clazz` - The intended extension type
    Returns:
      The extension with the correct type, or nothing if the extension either did not exist or did not have the right type
    Throws:
      `VulkanException` - On errors

  - ### flushMappedMemoryRanges

    void flushMappedMemoryRanges(List<VulkanMappedMemoryRange> ranges) throws VulkanException
    Flush mapped memory ranges.
    Parameters:
      `ranges` - The ranges
    Throws:
      `VulkanException` - On errors

  - ### flushMappedMemoryRange

    default void flushMappedMemoryRange(VulkanMappedMemoryRange range) throws VulkanException
    Flush mapped memory ranges.
    Parameters:
      `range` - The range
    Throws:
      `VulkanException` - On errors

  - ### createPipelineLayout

    VulkanPipelineLayoutType createPipelineLayout(VulkanPipelineLayoutCreateInfo info) throws VulkanException
    Create a pipeline layout.
    Parameters:
      `info` - The pipeline layout creation info
    Returns:
      A pipeline layout
    Throws:
      `VulkanException` - On errors

  - ### createDescriptorSetLayout

    VulkanDescriptorSetLayoutType createDescriptorSetLayout(VulkanDescriptorSetLayoutCreateInfo info) throws VulkanException
    Create a descriptor set layout.
    Parameters:
      `info` - The descriptor set layout creation info
    Returns:
      A descriptor set layout
    Throws:
      `VulkanException` - On errors

  - ### createDescriptorPool

    VulkanDescriptorPoolType createDescriptorPool(VulkanDescriptorPoolCreateInfo info) throws VulkanException
    Create a descriptor pool.
    Parameters:
      `info` - The descriptor pool creation info
    Returns:
      A descriptor pool
    Throws:
      `VulkanException` - On errors

  - ### allocateDescriptorSets

    List<VulkanDescriptorSetType> allocateDescriptorSets(VulkanDescriptorSetAllocateInfo info) throws VulkanException
    Allocate descriptor sets.
    Parameters:
      `info` - The descriptor set allocation info
    Returns:
      A list of descriptor sets
    Throws:
      `VulkanException` - On errors

  - ### updateDescriptorSets

    void updateDescriptorSets(List<VulkanWriteDescriptorSet> descriptor_writes, List<VulkanCopyDescriptorSet> descriptor_copies) throws VulkanException
    Update the contents of a descriptor set object.
    Parameters:
      `descriptor_writes` - An array of VulkanWriteDescriptorSet structures describing the descriptor sets to write to
      `descriptor_copies` - An array of VulkanCopyDescriptorSet structures describing the descriptor sets to copy between.
    Throws:
      `VulkanException` - On errors

  - ### createRenderPass

    VulkanRenderPassType createRenderPass(VulkanRenderPassCreateInfo render_pass_create_info) throws VulkanException
    Create a render pass.
    Parameters:
      `render_pass_create_info` - The render pass creation info
    Returns:
      A render pass
    Throws:
      `VulkanException` - On errors

  - ### createGraphicsPipeline

    default VulkanPipelineType createGraphicsPipeline(VulkanGraphicsPipelineCreateInfo pipeline_info) throws VulkanException
    Create a graphics pipeline.
    Parameters:
      `pipeline_info` - The pipeline creation info
    Returns:
      A graphics pipeline
    Throws:
      `VulkanException` - On errors

  - ### createGraphicsPipeline

    default VulkanPipelineType createGraphicsPipeline(VulkanPipelineCacheType cache, VulkanGraphicsPipelineCreateInfo pipeline_info) throws VulkanException
    Create a graphics pipeline.
    Parameters:
      `cache` - A pipeline cache
      `pipeline_info` - The pipeline creation info
    Returns:
      A graphics pipeline
    Throws:
      `VulkanException` - On errors

  - ### createGraphicsPipeline

    default VulkanPipelineType createGraphicsPipeline(Optional<VulkanPipelineCacheType> pipeline_cache, VulkanGraphicsPipelineCreateInfo pipeline_info) throws VulkanException
    Create a graphics pipeline.
    Parameters:
      `pipeline_cache` - A pipeline cache
      `pipeline_info` - The pipeline creation info
    Returns:
      A graphics pipeline
    Throws:
      `VulkanException` - On errors

  - ### createPipelineCache

    VulkanPipelineCacheType createPipelineCache(VulkanPipelineCacheCreateInfo pipeline_info) throws VulkanException
    Create a pipeline cache.
    Parameters:
      `pipeline_info` - The pipeline cache creation info
    Returns:
      A pipeline cache
    Throws:
      `VulkanException` - On errors

  - ### getPipelineCacheDataSize

    long getPipelineCacheDataSize(VulkanPipelineCacheType pipeline_cache) throws VulkanException
    Retrieve the size of the data store for the pipeline cache.
    Parameters:
      `pipeline_cache` - The pipeline cache
    Returns:
      The size of the pipeline cache data
    Throws:
      `VulkanException` - On errors

  - ### getImageMemoryRequirements

    VulkanMemoryRequirements getImageMemoryRequirements(VulkanImageType image) throws VulkanException
    Retrieve the memory requirements for the given image.
    Parameters:
      `image` - The image
    Returns:
      The memory requirements
    Throws:
      `VulkanException` - On errors

  - ### getPipelineCacheData

    VulkanLogicalDeviceType.VulkanPipelineCacheDataResult getPipelineCacheData(VulkanPipelineCacheType pipeline_cache, ByteBuffer data) throws VulkanException
    Retrieve the data store for the pipeline cache.
    Parameters:
      `pipeline_cache` - The pipeline cache
      `data` - The buffer used to store the data
    Returns:
      A value indicating the result of the retrieval
    Throws:
      `VulkanException` - On errors
    See Also:
      - `getPipelineCacheDataSize(VulkanPipelineCacheType)`

  - ### createGraphicsPipelines

    List<VulkanPipelineType> createGraphicsPipelines(Optional<VulkanPipelineCacheType> pipeline_cache, List<VulkanGraphicsPipelineCreateInfo> pipeline_infos) throws VulkanException
    Create a set of graphics pipelines.
    Parameters:
      `pipeline_cache` - A pipeline cache
      `pipeline_infos` - The pipeline creation infos
    Returns:
      A list of graphics pipelines
    Throws:
      `VulkanException` - On errors

  - ### createGraphicsPipelines

    default List<VulkanPipelineType> createGraphicsPipelines(VulkanPipelineCacheType pipeline_cache, List<VulkanGraphicsPipelineCreateInfo> pipeline_infos) throws VulkanException
    Create a set of graphics pipelines.
    Parameters:
      `pipeline_cache` - A pipeline cache
      `pipeline_infos` - The pipeline creation infos
    Returns:
      A list of graphics pipelines
    Throws:
      `VulkanException` - On errors

  - ### createGraphicsPipelines

    default List<VulkanPipelineType> createGraphicsPipelines(List<VulkanGraphicsPipelineCreateInfo> pipeline_infos) throws VulkanException
    Create a set of graphics pipelines.
    Parameters:
      `pipeline_infos` - The pipeline creation infos
    Returns:
      A list of graphics pipelines
    Throws:
      `VulkanException` - On errors

  - ### createQueryPool

    VulkanQueryPoolType createQueryPool(VulkanQueryPoolCreateInfo create_info) throws VulkanException
    Create a query pool.
    Parameters:
      `create_info` - The query pool creation info
    Returns:
      A query pool
    Throws:
      `VulkanException` - On errors

  - ### createFramebuffer

    VulkanFramebufferType createFramebuffer(VulkanFramebufferCreateInfo create_info) throws VulkanException
    Create a framebuffer.
    Parameters:
      `create_info` - The framebuffer creation info
    Returns:
      A pipeline
    Throws:
      `VulkanException` - On errors

  - ### createCommandPool

    VulkanCommandPoolType createCommandPool(VulkanCommandPoolCreateInfo create_info) throws VulkanException
    Create a command pool.
    Parameters:
      `create_info` - The pool creation info
    Returns:
      A command pool
    Throws:
      `VulkanException` - On errors

  - ### createCommandBuffers

    List<VulkanCommandBufferType> createCommandBuffers(VulkanCommandBufferCreateInfo create_info) throws VulkanException
    Create a command buffer.
    Parameters:
      `create_info` - The command buffer creation info
    Returns:
      A list of command buffers
    Throws:
      `VulkanException` - On errors

  - ### createCommandBuffer

    default VulkanCommandBufferType createCommandBuffer(VulkanCommandPoolType pool, VulkanCommandBufferLevel level) throws VulkanException
    Create a command buffer.
    Parameters:
      `pool` - The command buffer pool
      `level` - The command buffer level
    Returns:
      A command buffer
    Throws:
      `VulkanException` - On errors

  - ### createBinarySemaphore

    VulkanSemaphoreBinaryType createBinarySemaphore(VulkanSemaphoreBinaryCreateInfo info) throws VulkanException
    Create a binary semaphore.
    Parameters:
      `info` - The semaphore creation info
    Returns:
      A semaphore
    Throws:
      `VulkanException` - On errors

  - ### createBinarySemaphore

    default VulkanSemaphoreBinaryType createBinarySemaphore() throws VulkanException
    Create a binary semaphore.
    Returns:
      A semaphore
    Throws:
      `VulkanException` - On errors

  - ### createTimelineSemaphore

    VulkanSemaphoreTimelineType createTimelineSemaphore(VulkanSemaphoreTimelineCreateInfo info) throws VulkanException
    Create a timeline semaphore.
    Parameters:
      `info` - The semaphore creation info
    Returns:
      A semaphore
    Throws:
      `VulkanException` - On errors

  - ### createTimelineSemaphore

    default VulkanSemaphoreTimelineType createTimelineSemaphore(long initialValue) throws VulkanException
    Create a timeline semaphore.
    Parameters:
      `initialValue` - The semaphore initial value
    Returns:
      A semaphore
    Throws:
      `VulkanException` - On errors

  - ### createFence

    VulkanFenceType createFence(VulkanFenceCreateInfo createInfo) throws VulkanException
    Create a fence.
    Parameters:
      `createInfo` - The fence creation info
    Returns:
      A fence
    Throws:
      `VulkanException` - On errors

  - ### createFence

    default VulkanFenceType createFence() throws VulkanException
    Create a fence.
    Returns:
      A fence
    Throws:
      `VulkanException` - On errors

  - ### createEvent

    VulkanEventType createEvent(VulkanEventCreateInfo create_info) throws VulkanException
    Create an event.
    Parameters:
      `create_info` - The event creation info
    Returns:
      An event
    Throws:
      `VulkanException` - On errors

  - ### resetFences

    void resetFences(List<VulkanFenceType> fences) throws VulkanException
    Reset the given fences.
    Parameters:
      `fences` - The fences
    Throws:
      `VulkanException` - On errors

  - ### resetCommandPool

    void resetCommandPool(VulkanCommandPoolType pool, Set<VulkanCommandPoolResetFlag> flags) throws VulkanException
    Reset the given command pool.
    Parameters:
      `pool` - The command pool
      `flags` - The reset flags
    Throws:
      `VulkanException` - On errors

  - ### resetCommandPool

    default void resetCommandPool(VulkanCommandPoolType pool) throws VulkanException
    Reset the given command pool.
    Parameters:
      `pool` - The command pool
    Throws:
      `VulkanException` - On errors

  - ### resetDescriptorPool

    void resetDescriptorPool(VulkanDescriptorPoolType pool, Set<VulkanDescriptorPoolResetFlag> flags) throws VulkanException
    Reset the given descriptor pool.
    Parameters:
      `pool` - The descriptor pool
      `flags` - The reset flags
    Throws:
      `VulkanException` - On errors

  - ### resetDescriptorPool

    default void resetDescriptorPool(VulkanDescriptorPoolType pool) throws VulkanException
    Reset the given descriptor pool.
    Parameters:
      `pool` - The descriptor pool
    Throws:
      `VulkanException` - On errors

  - ### waitIdle

    void waitIdle() throws VulkanException
    Wait for this device to become idle.
    Throws:
      `VulkanException` - On errors

  - ### waitForFences

    VulkanLogicalDeviceType.VulkanWaitStatus waitForFences(List<VulkanFenceType> fences, boolean wait_all, long timeout_nanos) throws VulkanException
    Wait for one or more fences to become signaled.
    Parameters:
      `fences` - The fences upon which to wait
      `wait_all` - `true` if all fences must become signalled to stop waiting, `false` if any fence can become signalled
      `timeout_nanos` - The timeout period in units of nanoseconds.
    Returns:
      A value indicating whether waiting succeeded or timed out
    Throws:
      `VulkanException` - On errors

  - ### waitForFence

    default VulkanLogicalDeviceType.VulkanWaitStatus waitForFence(VulkanFenceType fence, long timeout_nanos) throws VulkanException
    Wait for a fence to become signaled.
    Parameters:
      `fence` - The fences upon which to wait
      `timeout_nanos` - The timeout period in units of nanoseconds.
    Returns:
      A value indicating whether waiting succeeded or timed out
    Throws:
      `VulkanException` - On errors

  - ### createBuffer

    VulkanBufferType createBuffer(VulkanBufferCreateInfo create_info) throws VulkanException
    Create a buffer.
    Parameters:
      `create_info` - The buffer creation info
    Returns:
      A buffer
    Throws:
      `VulkanException` - On errors

  - ### createImage

    VulkanImageType createImage(VulkanImageCreateInfo create_info) throws VulkanException
    Create an image.
    Parameters:
      `create_info` - The image creation info
    Returns:
      A image
    Throws:
      `VulkanException` - On errors

  - ### getBufferMemoryRequirements

    VulkanMemoryRequirements getBufferMemoryRequirements(VulkanBufferType buffer) throws VulkanException
    Retrieve the memory requirements for the given buffer.
    Parameters:
      `buffer` - The buffer
    Returns:
      The memory requirements
    Throws:
      `VulkanException` - On errors

  - ### getBufferDeviceAddress

    VulkanDeviceAddress getBufferDeviceAddress(VulkanBufferType buffer) throws VulkanException
    Retrieve the device address for the given buffer.
    Parameters:
      `buffer` - The buffer
    Returns:
      The address
    Throws:
      `VulkanException` - On errors

  - ### allocateMemory

    VulkanDeviceMemoryType allocateMemory(VulkanMemoryAllocateInfo info) throws VulkanException
    Allocate device memory.
    Parameters:
      `info` - The allocation info
    Returns:
      Allocated memory
    Throws:
      `VulkanException` - On errors

  - ### bindBufferMemory

    void bindBufferMemory(VulkanBufferType buffer, VulkanDeviceMemoryType device_memory, long offset) throws VulkanException
    Bind device memory to a buffer object.
    Parameters:
      `buffer` - The logical device that owns the buffer and memory
      `device_memory` - The device memory to attach
      `offset` - The start offset of the region of memory which is to be bound to the buffer. The number of bytes returned in the VkMemoryRequirements::size member in memory, starting from memoryOffset bytes, will be bound to the specified buffer.
    Throws:
      `VulkanException` - On errors

  - ### bindImageMemory

    void bindImageMemory(VulkanImageType image, VulkanDeviceMemoryType device_memory, long offset) throws VulkanException
    Bind device memory to a image object.
    Parameters:
      `image` - The logical device that owns the image and memory
      `device_memory` - The device memory to attach
      `offset` - The start offset of the region of memory which is to be bound to the image. The number of bytes returned in the VkMemoryRequirements::size member in memory, starting from memoryOffset bytes, will be bound to the specified image.
    Throws:
      `VulkanException` - On errors

  - ### mapMemory

    VulkanMappedMemoryType mapMemory(VulkanDeviceMemoryType memory, long offset, long size, Set<VulkanMemoryMapFlag> flags) throws VulkanException
    Map a memory object into the application address space.
    Parameters:
      `memory` - The device memory object to be mapped
      `offset` - A zero-based byte offset from the beginning of the memory object
      `size` - The size of the memory range to map, or VK_WHOLE_SIZE to map from offset to the end of the allocation
      `flags` - The flags
    Returns:
      Mapped memory
    Throws:
      `VulkanException` - On errors

  - ### mergePipelineCaches

    void mergePipelineCaches(List<VulkanPipelineCacheType> caches, VulkanPipelineCacheType output) throws VulkanException
    Combine the data stores of pipeline caches.
    Parameters:
      `caches` - The input caches
      `output` - The output cache
    Throws:
      `VulkanException` - On errors

  - ### setEvent

    void setEvent(VulkanEventType event) throws VulkanException
    Set an event object to signaled state.
    Parameters:
      `event` - The event
    Throws:
      `VulkanException` - On errors

  - ### resetEvent

    void resetEvent(VulkanEventType event) throws VulkanException
    Reset an event object to non-signaled state.
    Parameters:
      `event` - The event
    Throws:
      `VulkanException` - On errors

  - ### getEventStatus

    VulkanLogicalDeviceType.VulkanEventStatus getEventStatus(VulkanEventType event) throws VulkanException
    Retrieve the status of an event object.
    Parameters:
      `event` - The event
    Returns:
      The event status
    Throws:
      `VulkanException` - On errors

  - ### getSemaphoreCounterValue

    long getSemaphoreCounterValue(VulkanSemaphoreTimelineType semaphore) throws VulkanException
    Retrieve the current value of a semaphore object.
    Parameters:
      `semaphore` - The semaphore
    Returns:
      The semaphore value
    Throws:
      `VulkanException` - On errors

  - ### getFenceStatus

    VulkanLogicalDeviceType.VulkanFenceStatus getFenceStatus(VulkanFenceType fence) throws VulkanException
    Retrieve the status of a fence object.
    Parameters:
      `fence` - The fence
    Returns:
      The fence status
    Throws:
      `VulkanException` - On errors

  - ### getImageSubresourceLayout

    VulkanSubresourceLayout getImageSubresourceLayout(VulkanImageType image, VulkanImageSubresource image_subresource) throws VulkanException
    Retrieve information about an image subresource.
    Parameters:
      `image` - The image
      `image_subresource` - A structure selecting a specific image for the image subresource
    Returns:
      The subresource layout
    Throws:
      `VulkanException` - On errors

  - ### createComputePipeline

    default VulkanPipelineType createComputePipeline(VulkanComputePipelineCreateInfo pipeline_info) throws VulkanException
    Create a compute pipeline.
    Parameters:
      `pipeline_info` - The pipeline creation info
    Returns:
      A compute pipeline
    Throws:
      `VulkanException` - On errors

  - ### createComputePipeline

    default VulkanPipelineType createComputePipeline(VulkanPipelineCacheType cache, VulkanComputePipelineCreateInfo pipeline_info) throws VulkanException
    Create a compute pipeline.
    Parameters:
      `cache` - A pipeline cache
      `pipeline_info` - The pipeline creation info
    Returns:
      A compute pipeline
    Throws:
      `VulkanException` - On errors

  - ### createComputePipeline

    default VulkanPipelineType createComputePipeline(Optional<VulkanPipelineCacheType> pipeline_cache, VulkanComputePipelineCreateInfo pipeline_info) throws VulkanException
    Create a compute pipeline.
    Parameters:
      `pipeline_cache` - A pipeline cache
      `pipeline_info` - The pipeline creation info
    Returns:
      A compute pipeline
    Throws:
      `VulkanException` - On errors

  - ### createComputePipelines

    List<VulkanPipelineType> createComputePipelines(Optional<VulkanPipelineCacheType> pipeline_cache, List<VulkanComputePipelineCreateInfo> pipeline_infos) throws VulkanException
    Create a set of compute pipelines.
    Parameters:
      `pipeline_cache` - A pipeline cache
      `pipeline_infos` - The pipeline creation infos
    Returns:
      A list of compute pipelines
    Throws:
      `VulkanException` - On errors

  - ### createComputePipelines

    default List<VulkanPipelineType> createComputePipelines(VulkanPipelineCacheType pipeline_cache, List<VulkanComputePipelineCreateInfo> pipeline_infos) throws VulkanException
    Create a set of compute pipelines.
    Parameters:
      `pipeline_cache` - A pipeline cache
      `pipeline_infos` - The pipeline creation infos
    Returns:
      A list of compute pipelines
    Throws:
      `VulkanException` - On errors

  - ### createComputePipelines

    default List<VulkanPipelineType> createComputePipelines(List<VulkanComputePipelineCreateInfo> pipeline_infos) throws VulkanException
    Create a set of compute pipelines.
    Parameters:
      `pipeline_infos` - The pipeline creation infos
    Returns:
      A list of compute pipelines
    Throws:
      `VulkanException` - On errors

  - ### waitForTimelineSemaphores

    VulkanLogicalDeviceType.VulkanWaitStatus waitForTimelineSemaphores(List<VulkanSemaphoreTimelineWait> semaphores, boolean waitAll, long timeoutNanos) throws VulkanException
    Wait for one or more semaphores to become signaled.
    Parameters:
      `semaphores` - The semaphores upon which to wait
      `waitAll` - `true` if all semaphores must become signalled to stop waiting, `false` if any semaphore can become signalled
      `timeoutNanos` - The timeout period in units of nanoseconds.
    Returns:
      A value indicating whether waiting succeeded or timed out
    Throws:
      `VulkanException` - On errors

  - ### waitForTimelineSemaphore

    default VulkanLogicalDeviceType.VulkanWaitStatus waitForTimelineSemaphore(VulkanSemaphoreTimelineWait semaphore, long timeoutNanos) throws VulkanException
    Wait for a semaphore to become signaled.
    Parameters:
      `semaphore` - The semaphores upon which to wait
      `timeoutNanos` - The timeout period in units of nanoseconds.
    Returns:
      A value indicating whether waiting succeeded or timed out
    Throws:
      `VulkanException` - On errors

  - ### signalTimelineSemaphore

    void signalTimelineSemaphore(VulkanSemaphoreTimelineType semaphore, long value) throws VulkanException
    Signal a timeline semaphore.
    Parameters:
      `semaphore` - The semaphore
      `value` - The value
    Throws:
      `VulkanException` - On errors