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
- VkExternalComputeQueueCreateInfoNV
- VkExternalComputeQueueDataParamsNV
- Extending VkDeviceCreateInfo:
- Extending VkPhysicalDeviceProperties2:
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