| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
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
ExternalComputeQueueDataParamsNVExtending
DeviceCreateInfo:Extending
PhysicalDeviceProperties2:
New Enum Constants
NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSIONExtending
ObjectType:Extending
StructureType:
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
- createExternalComputeQueueNV :: MonadIO io => Device -> ExternalComputeQueueCreateInfoNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io ("externalQueue" ::: ExternalComputeQueueNV)
- withExternalComputeQueueNV :: MonadIO io => Device -> ExternalComputeQueueCreateInfoNV -> Maybe AllocationCallbacks -> (io ExternalComputeQueueNV -> (ExternalComputeQueueNV -> io ()) -> r) -> r
- destroyExternalComputeQueueNV :: MonadIO io => Device -> ("externalQueue" ::: ExternalComputeQueueNV) -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
- getExternalComputeQueueDataNV :: MonadIO io => ("externalQueue" ::: ExternalComputeQueueNV) -> ("data" ::: Ptr ()) -> io ExternalComputeQueueDataParamsNV
- data ExternalComputeQueueDeviceCreateInfoNV = ExternalComputeQueueDeviceCreateInfoNV {}
- data ExternalComputeQueueCreateInfoNV = ExternalComputeQueueCreateInfoNV {}
- data ExternalComputeQueueDataParamsNV = ExternalComputeQueueDataParamsNV {}
- data PhysicalDeviceExternalComputeQueuePropertiesNV = PhysicalDeviceExternalComputeQueuePropertiesNV {}
- type NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION = 1
- pattern NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION :: Integral a => a
- type NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME = "VK_NV_external_compute_queue"
- pattern NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME :: (Eq a, IsString a) => a
- data ExternalComputeQueueNV = ExternalComputeQueueNV {}
Documentation
createExternalComputeQueueNV Source #
Arguments
| :: MonadIO io | |
| => Device |
|
| -> ExternalComputeQueueCreateInfoNV |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io ("externalQueue" ::: ExternalComputeQueueNV) |
vkCreateExternalComputeQueueNV - Create an external compute queue for use by a compatible external API.
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
pCreateInfomust be a valid pointer to a validExternalComputeQueueCreateInfoNVstructure - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure -
pExternalQueuemust be a valid pointer to aExternalComputeQueueNVhandle - The device
must have been created with at least
1queue
Return Codes
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 |
|
| -> ("externalQueue" ::: ExternalComputeQueueNV) |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io () |
vkDestroyExternalComputeQueueNV - Destroys an external queue.
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
externalQueuemust be a validExternalComputeQueueNVhandle - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure -
externalQueuemust have been created, allocated, or retrieved fromdevice
See Also
VK_NV_external_compute_queue,
AllocationCallbacks,
Device,
ExternalComputeQueueNV
getExternalComputeQueueDataNV Source #
Arguments
| :: MonadIO io | |
| => ("externalQueue" ::: ExternalComputeQueueNV) |
|
| -> ("data" ::: Ptr ()) |
|
| -> 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
Constructors
| ExternalComputeQueueDeviceCreateInfoNV | |
Fields
| |
Instances
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
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
| |
Instances
data PhysicalDeviceExternalComputeQueuePropertiesNV Source #
VkPhysicalDeviceExternalComputeQueuePropertiesNV - Structure specifying hardware specific information and limits for VK_NV_external_compute_queue functionality
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceExternalComputeQueuePropertiesNV | |
Fields
| |
Instances
pattern NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION :: Integral a => a Source #
type NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME = "VK_NV_external_compute_queue" Source #
pattern NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME :: (Eq a, IsString a) => a Source #
data ExternalComputeQueueNV Source #
VkExternalComputeQueueNV - Opaque handle to an external compute queue
See Also
VK_DEFINE_HANDLE,
VK_NV_external_compute_queue,
createExternalComputeQueueNV,
destroyExternalComputeQueueNV,
getExternalComputeQueueDataNV
Constructors
| ExternalComputeQueueNV | |
Instances
| Eq ExternalComputeQueueNV Source # | |
Defined in Vulkan.Extensions.Handles Methods (==) :: ExternalComputeQueueNV -> ExternalComputeQueueNV -> Bool # (/=) :: ExternalComputeQueueNV -> ExternalComputeQueueNV -> Bool # | |
| Show ExternalComputeQueueNV Source # | |
Defined in Vulkan.Extensions.Handles Methods showsPrec :: Int -> ExternalComputeQueueNV -> ShowS # show :: ExternalComputeQueueNV -> String # showList :: [ExternalComputeQueueNV] -> ShowS # | |
| HasObjectType ExternalComputeQueueNV Source # | |
Defined in Vulkan.Extensions.Handles Methods objectTypeAndHandle :: ExternalComputeQueueNV -> (ObjectType, Word64) Source # | |
| IsHandle ExternalComputeQueueNV Source # | |
Defined in Vulkan.Extensions.Handles | |
| Zero ExternalComputeQueueNV Source # | |
Defined in Vulkan.Extensions.Handles Methods | |