# VK_NV_external_compute_queue(3) Manual Page

## Name

VK_NV_external_compute_queue - device extension

Loading… please wait.

## Registered Extension Number

557

## Revision

1

## Ratification Status

Not ratified

## Extension and Version Dependencies

None

## Contact

- Chris Lentini [GitHub]clentini

## 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 `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

- VkExternalComputeQueueNV

## New Commands

- vkCreateExternalComputeQueueNV

- vkDestroyExternalComputeQueueNV

- vkGetExternalComputeQueueDataNV

## New Structures

- VkExternalComputeQueueCreateInfoNV

- VkExternalComputeQueueDataParamsNV

- Extending VkDeviceCreateInfo:

  - VkExternalComputeQueueDeviceCreateInfoNV

- Extending VkPhysicalDeviceProperties2:

  - VkPhysicalDeviceExternalComputeQueuePropertiesNV

## 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`

Note | 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`.

Note | 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

## 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.

## Copyright

Copyright 2014-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0