vulkan
Safe HaskellNone
LanguageHaskell2010

Vulkan.Extensions.VK_NV_external_compute_queue

Description

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.

Synopsis

Documentation

createExternalComputeQueueNV Source #

Arguments

:: MonadIO io 
=> Device

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

-> ExternalComputeQueueCreateInfoNV

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

-> ("allocator" ::: Maybe AllocationCallbacks)

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

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

withExternalComputeQueueNV :: MonadIO io => Device -> ExternalComputeQueueCreateInfoNV -> Maybe AllocationCallbacks -> (io ExternalComputeQueueNV -> (ExternalComputeQueueNV -> io ()) -> r) -> r Source #

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.

destroyExternalComputeQueueNV Source #

Arguments

:: MonadIO io 
=> Device

device is the logical device that destroys the external queue.

-> ("externalQueue" ::: ExternalComputeQueueNV)

externalQueue is the ExternalComputeQueueNV to destroy.

-> ("allocator" ::: Maybe AllocationCallbacks)

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

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

getExternalComputeQueueDataNV Source #

Arguments

:: MonadIO io 
=> ("externalQueue" ::: ExternalComputeQueueNV)

externalQueue is the ExternalComputeQueueNV to query the data for.

externalQueue must be a valid ExternalComputeQueueNV handle

-> ("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

-> io ExternalComputeQueueDataParamsNV 

vkGetExternalComputeQueueDataNV - Retrieves data necessary for compatible external API initialization

Valid Usage (Implicit)

See Also

VK_NV_external_compute_queue, ExternalComputeQueueDataParamsNV, ExternalComputeQueueNV

data ExternalComputeQueueDeviceCreateInfoNV Source #

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

Valid Usage (Implicit)

See Also

VK_NV_external_compute_queue, StructureType

Constructors

ExternalComputeQueueDeviceCreateInfoNV 

Fields

Instances

Instances details
Eq ExternalComputeQueueDeviceCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Storable ExternalComputeQueueDeviceCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Show ExternalComputeQueueDeviceCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

FromCStruct ExternalComputeQueueDeviceCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

ToCStruct ExternalComputeQueueDeviceCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Zero ExternalComputeQueueDeviceCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

data ExternalComputeQueueCreateInfoNV Source #

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

ExternalComputeQueueCreateInfoNV 

Fields

Instances

Instances details
Eq ExternalComputeQueueCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Storable ExternalComputeQueueCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Show ExternalComputeQueueCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

FromCStruct ExternalComputeQueueCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

ToCStruct ExternalComputeQueueCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Zero ExternalComputeQueueCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

data ExternalComputeQueueDataParamsNV Source #

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

ExternalComputeQueueDataParamsNV 

Fields

  • deviceIndex :: Word32

    deviceIndex is the index of the device within a device group that the data is being queried for. This is ignored if device groups are not utilized.

Instances

Instances details
Eq ExternalComputeQueueDataParamsNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Storable ExternalComputeQueueDataParamsNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Show ExternalComputeQueueDataParamsNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

FromCStruct ExternalComputeQueueDataParamsNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

ToCStruct ExternalComputeQueueDataParamsNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Zero ExternalComputeQueueDataParamsNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

data PhysicalDeviceExternalComputeQueuePropertiesNV Source #

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

Valid Usage (Implicit)

See Also

VK_NV_external_compute_queue, StructureType

Constructors

PhysicalDeviceExternalComputeQueuePropertiesNV 

Fields

Instances

Instances details
Eq PhysicalDeviceExternalComputeQueuePropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Storable PhysicalDeviceExternalComputeQueuePropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Show PhysicalDeviceExternalComputeQueuePropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

FromCStruct PhysicalDeviceExternalComputeQueuePropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

ToCStruct PhysicalDeviceExternalComputeQueuePropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

Zero PhysicalDeviceExternalComputeQueuePropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_external_compute_queue

type NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME = "VK_NV_external_compute_queue" Source #