Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Name
VK_EXT_private_data - device extension
VK_EXT_private_data
- Name String
VK_EXT_private_data
- Extension Type
- Device extension
- Registered Extension Number
- 296
- Revision
- 1
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- VK_KHR_get_physical_device_properties2
- Deprecation State
- Promoted to Vulkan 1.3
- Contact
Other Extension Metadata
- Last Modified Date
- 2020-03-25
- Interactions and External Dependencies
- Promoted to Vulkan 1.3 Core
- IP Status
- No known IP claims.
- Contributors
- Matthew Rusch, NVIDIA
- Nuno Subtil, NVIDIA
- Piers Daniell, NVIDIA
- Jeff Bolz, NVIDIA
Description
This extension is a device extension which enables attaching arbitrary payloads to Vulkan objects. It introduces the idea of private data slots as a means of storing a 64-bit unsigned integer of application defined data. Private data slots can be created or destroyed any time an associated device is available. Private data slots can be reserved at device creation time, and limiting use to the amount reserved will allow the extension to exhibit better performance characteristics.
New Object Types
New Commands
New Structures
Extending
DeviceCreateInfo
:Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:
New Bitmasks
New Enum Constants
EXT_PRIVATE_DATA_SPEC_VERSION
Extending
ObjectType
:Extending
StructureType
:
Promotion to Vulkan 1.3
Functionality in this extension is included in core Vulkan 1.3, with the EXT suffix omitted. The original type, enum and command names are still available as aliases of the core functionality.
Examples
- In progress
Issues
- If I have to create a
PrivateDataSlot
to store and retrieve data on an object, how does this extension help me? Will I not need to store thePrivateDataSlot
mapping with each object, and if I am doing that, I might as well just store the original data!
RESOLVED: The PrivateDataSlot
can be thought
of as an opaque index into storage that is reserved in each object. That
is, you can use the same PrivateDataSlot
with
each object for a specific piece of information. For example, if a layer
wishes to track per-object information, the layer only needs to allocate
one PrivateDataSlot
per device and it can use
that private data slot for all of the device’s child objects. This
allows multiple layers to store private data without conflicting with
each other’s and/or the application’s private data.
- What if I need to store more than 64-bits of information per object?
RESOLVED: The data that you store per object could be a pointer to another object or structure of your own allocation.
Version History
Revision 1, 2020-01-15 (Matthew Rusch)
- Initial draft
See Also
DevicePrivateDataCreateInfoEXT
,
PhysicalDevicePrivateDataFeaturesEXT
, PrivateDataSlotCreateFlagsEXT
,
PrivateDataSlotCreateInfoEXT
, PrivateDataSlotEXT
,
createPrivateDataSlotEXT
, destroyPrivateDataSlotEXT
,
getPrivateDataEXT
, setPrivateDataEXT
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.
Documentation
pattern OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT :: ObjectType Source #
createPrivateDataSlotEXT :: MonadIO io => Device -> PrivateDataSlotCreateInfo -> ("allocator" ::: Maybe AllocationCallbacks) -> io PrivateDataSlot Source #
destroyPrivateDataSlotEXT :: MonadIO io => Device -> PrivateDataSlot -> ("allocator" ::: Maybe AllocationCallbacks) -> io () Source #
setPrivateDataEXT :: MonadIO io => Device -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlot -> ("data" ::: Word64) -> io () Source #
getPrivateDataEXT :: MonadIO io => Device -> ObjectType -> ("objectHandle" ::: Word64) -> PrivateDataSlot -> io ("data" ::: Word64) Source #
type PrivateDataSlotEXT = PrivateDataSlot Source #
type EXT_PRIVATE_DATA_SPEC_VERSION = 1 Source #
pattern EXT_PRIVATE_DATA_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_PRIVATE_DATA_EXTENSION_NAME = "VK_EXT_private_data" Source #
pattern EXT_PRIVATE_DATA_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #