HORIZON HASKELLDocslts/ghc-9.14.x3e2d5682026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 9.14.1 · lts/ghc-9.14.x · 3e2d568 · 2026-10-11

Modulevulkan-3.27GHC2021

Vulkan.Extensions.VK_NV_external_compute_queue

Name

VK_NV_external_compute_queue - device extension

VK_NV_external_compute_queue

Name String

VK_NV_external_compute_queue

Extension Type

Device extension

Registered Extension Number

557

Revision

1

Ratification Status

Not ratified

Extension and Version Dependencies

None

Contact
Extension Proposal

VK_NV_external_compute_queue

Other Extension Metadata

Last Modified Date

2025-03-24

Contributors
  • Chris Lentini, NVIDIA

  • Eric Werness, NVIDIA

  • James Jones, NVIDIA

  • Jeff Juliano, NVIDIA

  • Liam Middlebrook, NVIDIA

  • Lionel Duc, NVIDIA

Description

This extension gives applications the ability to join compatible external compute APIs to a Device. In this way, the extension allows an application to achieve simultaneous execution between work submitted from these compatible external APIs and work that has been submitted through the Vulkan API.

At device creation time, an application must supply a ExternalComputeQueueDeviceCreateInfoNV. This communicates to the implementation the maximum number of external queues that the application can create at once. This information may be used by the implementation to aid in decisions made during device creation.

After device creation, the function createExternalComputeQueueNV is used by an application to create a new ExternalComputeQueueNV object. The ExternalComputeQueueNV object holds information and reserves resources necessary for a compatible external API to be able to join a Device. This information can be queried through the getExternalComputeQueueDataNV function, returning an opaque blob of data which can be passed to compatible external APIs. The application must finally call destroyExternalComputeQueueNV when it is done in order to release the reserved resources.

This extension introduces a new properties structure, PhysicalDeviceExternalComputeQueuePropertiesNV, which can be queried through getPhysicalDeviceProperties2. The structure provides information on functional limits to the extension as well as a way of querying the size of the application allocated memory which must be passed to the getExternalComputeQueueDataNV function.

When creating a ExternalComputeQueueNV through createExternalComputeQueueNV, the ExternalComputeQueueCreateInfoNV structure requires an application to supply a Queue to aid in external compute queue creation. The supplied Queue is a strong scheduling hint about which queue it expects to submit graphics workloads to and with which it expects simultaneous execution of compute workloads submitted through the external API.

New Object Types

New Commands

New Structures

New Enum Constants

While the external queue is now a part of a Device, idling the device through deviceWaitIdle does not wait for the external queue. Draining the work on an external queue must be done through its own external API. External queues must be idled before destroying the associated Device.

In general, synchronization and resource sharing between the external API and Vulkan must still be accomplished via existing cross-API interop mechanisms.

Version History

  • Revision 1, 2024-05-20 (Chris Lentini)

    • Internal revisions

See Also

No cross-references are available

Document Notes

For more information, see the Vulkan Specification.

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

  • 7 types
  • 4 values
  • Packagevulkan-3.27
  • Exports13
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceVK_NV_external_compute_queue.hs
valuecreateExternalComputeQueueNV
  1. :: MonadIO io
  2. => Device

    device is the VkDevice that the external queue will be a part of.

  3. -> ExternalComputeQueueCreateInfoNV

    pCreateInfo is a pointer to a ExternalComputeQueueCreateInfoNV structure specifying configuration info for creating the external queue.

  4. -> "allocator" ::: Maybe AllocationCallbacks

    pAllocator controls host memory allocation as described in the Memory Allocation chapter.

  5. -> io ("externalQueue" ::: ExternalComputeQueueNV)
#

vkCreateExternalComputeQueueNV - Create an external compute queue for use by a compatible external API.

Valid Usage (Implicit)

  • device must be a valid Device handle

Return Codes

Success
Failure

See Also

VK_NV_external_compute_queue, AllocationCallbacks, Device, ExternalComputeQueueCreateInfoNV, ExternalComputeQueueNV

A convenience wrapper to make a compatible pair of calls to createExternalComputeQueueNV and destroyExternalComputeQueueNV

To ensure that destroyExternalComputeQueueNV is always called: pass bracket (or the allocate function from your favourite resource management library) as the last argument. To just extract the pair pass (,) as the last argument.

valuedestroyExternalComputeQueueNV
  1. :: MonadIO io
  2. => Device

    device is the logical device that destroys the external queue.

  3. -> "externalQueue" ::: ExternalComputeQueueNV

    externalQueue is the ExternalComputeQueueNV to destroy.

  4. -> "allocator" ::: Maybe AllocationCallbacks

    pAllocator controls host memory allocation as described in the Memory Allocation chapter.

  5. -> io ()
#

vkDestroyExternalComputeQueueNV - Destroys an external queue.

Valid Usage (Implicit)

  • device must be a valid Device handle

  • externalQueue must be a valid ExternalComputeQueueNV handle

  • If pAllocator is not NULL, pAllocator must be a valid pointer to a valid AllocationCallbacks structure

  • externalQueue must have been created, allocated, or retrieved from device

See Also

VK_NV_external_compute_queue, AllocationCallbacks, Device, ExternalComputeQueueNV

valuegetExternalComputeQueueDataNV
  1. :: MonadIO io
  2. => "externalQueue" ::: ExternalComputeQueueNV

    externalQueue is the ExternalComputeQueueNV to query the data for.

    externalQueue must be a valid ExternalComputeQueueNV handle

  3. -> "data" ::: Ptr ()

    pData is a pointer to application-allocated memory in which the requested data will be returned.

    pData must be at least the size specified by the externalDataSize field in the PhysicalDeviceExternalComputeQueuePropertiesNV structure

    pData must be a pointer value

  4. -> io ExternalComputeQueueDataParamsNV
#

vkGetExternalComputeQueueDataNV - Retrieves data necessary for compatible external API initialization

Valid Usage (Implicit)

See Also

VK_NV_external_compute_queue, ExternalComputeQueueDataParamsNV, ExternalComputeQueueNV

VkExternalComputeQueueDeviceCreateInfoNV - Structure specifying information about external compute queues relevant to device creation

Structure Chaining

Extends the structure

See Also

VK_NV_external_compute_queue, StructureType

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkExternalComputeQueueCreateInfoNV - Structure specifying configuration parameters for external compute queue creation

Description

When creating a ExternalComputeQueueNV, the preferredQueue field is a strong scheduling hint as to which Queue Vulkan graphics workloads will be submitted to with the expectation that execution will overlap with execution of work submitted by the external API.

Valid Usage (Implicit)

See Also

VK_NV_external_compute_queue, Queue, StructureType, createExternalComputeQueueNV

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkExternalComputeQueueDataParamsNV - Structure specifying parameters for implementation-specific data retrieval from the external compute queue

Valid Usage (Implicit)

See Also

VK_NV_external_compute_queue, StructureType, getExternalComputeQueueDataNV

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero

VkPhysicalDeviceExternalComputeQueuePropertiesNV - Structure specifying hardware specific information and limits for VK_NV_external_compute_queue functionality

Structure Chaining

Extends the structure

See Also

VK_NV_external_compute_queue, StructureType

Constructors

Instances6Eq, Show, Storable, FromCStruct, ToCStruct, Zero
Instances5Eq, Show, HasObjectType, IsHandle, Zero