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 VkDevice. 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 VkExternalComputeQueueDeviceCreateInfoNV. 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 vkCreateExternalComputeQueueNV is used by an application to create a new VkExternalComputeQueueNV object. The VkExternalComputeQueueNV object holds information and reserves resources necessary for a compatible external API to be able to join a VkDevice. This information can be queried through the vkGetExternalComputeQueueDataNV function, returning an opaque blob of data which can be passed to compatible external APIs. The application must finally call vkDestroyExternalComputeQueueNV when it is done in order to release the reserved resources.

This extension introduces a new properties structure, VkPhysicalDeviceExternalComputeQueuePropertiesNV, which can be queried through vkGetPhysicalDeviceProperties2. 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 vkGetExternalComputeQueueDataNV function.

When creating a VkExternalComputeQueueNV through vkCreateExternalComputeQueueNV, the VkExternalComputeQueueCreateInfoNV structure requires an application to supply a VkQueue to aid in external compute queue creation. The supplied VkQueue 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

  • VK_NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME
  • VK_NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION
  • Extending VkObjectType:
    • VK_OBJECT_TYPE_EXTERNAL_COMPUTE_QUEUE_NV
  • Extending VkStructureType:
    • VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_CREATE_INFO_NV
    • VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DATA_PARAMS_NV
    • VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DEVICE_CREATE_INFO_NV
    • VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_COMPUTE_QUEUE_PROPERTIES_NV

While the external queue is now a part of a VkDevice, idling the device through vkDeviceWaitIdle 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 VkDevice.

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

Issues

Version History

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