mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-02-25 12:35:11 +00:00
* Update release number to 121. Github Issues: * Add missing `structextends` attribute in `vk.xml` for slink:VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR (public issue 1018). * Change attributes of flink:vkCmdCopyAccelerationStructureNV, flink:vkCmdWriteAccelerationStructuresPropertiesNV, flink:vkCmdBuildAccelerationStructureNV, and flink:vkCmdTraceRaysNV to require that these commands execute outside renderpasses (public issue 1021). * Add an issue to the `<<VK_EXT_buffer_device_address>>` appendix discussing the introduction of new names and aliasing by equivalent old names (public pull request 1024). Internal Issues: * Protect the `VK_KHR_sampler_mirror_clamp_to_edge` extension with asciidoctor conditionals, and remove it from the core-only specification builds, where it had previously been force-included in the Makefile. It is now treated like any other extension (internal issue 1776). * Edit some asciidoctor anchor names starting with `features-features-` to just start with `features-`, since the old chapters was split into 3 pieces. There are still some mild naming inconsistencies with anchors which may be addressed in the future (internal issue 1792). * Add `KHR` alias for the non-suffixed extension token ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, for compatibility with naming rules for extensions (internal issue 1796). * Clarify requirements for external memory in NOTEs for sname:VkExternalMemoryBufferCreateInfo, and valid usage statements for flink:vkBindBufferMemory, slink:VkBindBufferMemoryInfo, flink:vkBindImageMemory, and slink:VkBindImageMemoryInfo (internal merge request 3301). * Make extension version numbers in `vk.xml` and extension appendices consistent. In a few cases, we could not recover history at this granularity, and left the summary of a version's change undefined (internal merge request 3323). * Fix invocation of `CodeInlineMacro` in the Ruby extension backing the `code:` macro, which was delegating to the wrong base class (internal merge request 3331). * Modify `reg.py` to do a better job of recognizing equivalent <enum> definitions. * Add a `sortorder` attribute to XML feature and extension tags. New Extensions * `<<VK_AMD_device_coherent_memory>>`
133 lines
4.9 KiB
Plaintext
133 lines
4.9 KiB
Plaintext
// Copyright (c) 2016-2019 Khronos Group. This work is licensed under a
|
|
// Creative Commons Attribution 4.0 International License; see
|
|
// http://creativecommons.org/licenses/by/4.0/
|
|
|
|
include::meta/VK_KHR_external_memory_capabilities.txt[]
|
|
|
|
*Last Modified Date*::
|
|
2016-10-17
|
|
*IP Status*::
|
|
No known IP claims.
|
|
*Interactions and External Dependencies*::
|
|
- Interacts with `<<VK_KHR_dedicated_allocation>>`.
|
|
- Interacts with `<<VK_NV_dedicated_allocation>>`.
|
|
- Promoted to Vulkan 1.1 Core
|
|
*Contributors*::
|
|
- Ian Elliot, Google
|
|
- Jesse Hall, Google
|
|
- James Jones, NVIDIA
|
|
|
|
An application may wish to reference device memory in multiple Vulkan
|
|
logical devices or instances, in multiple processes, and/or in multiple
|
|
APIs.
|
|
This extension provides a set of capability queries and handle definitions
|
|
that allow an application to determine what types of "`external`" memory
|
|
handles an implementation supports for a given set of use cases.
|
|
|
|
=== New Object Types
|
|
|
|
None.
|
|
|
|
=== New Enum Constants
|
|
|
|
* ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR
|
|
* ename:VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR
|
|
* ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR
|
|
* ename:VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR
|
|
* ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR
|
|
* ename:VK_LUID_SIZE_KHR
|
|
|
|
=== New Enums
|
|
|
|
* elink:VkExternalMemoryHandleTypeFlagBitsKHR
|
|
* elink:VkExternalMemoryFeatureFlagBitsKHR
|
|
|
|
=== New Structs
|
|
|
|
* slink:VkExternalMemoryPropertiesKHR
|
|
* slink:VkPhysicalDeviceExternalImageFormatInfoKHR
|
|
* slink:VkExternalImageFormatPropertiesKHR
|
|
* slink:VkPhysicalDeviceExternalBufferInfoKHR
|
|
* slink:VkExternalBufferPropertiesKHR
|
|
* slink:VkPhysicalDeviceIDPropertiesKHR
|
|
|
|
=== New Functions
|
|
|
|
* flink:vkGetPhysicalDeviceExternalBufferPropertiesKHR
|
|
|
|
=== Promotion to Vulkan 1.1
|
|
|
|
All functionality in this extension is included in core Vulkan 1.1, with the
|
|
KHR suffix omitted.
|
|
The original type, enum and command names are still available as aliases of
|
|
the core functionality.
|
|
|
|
=== Issues
|
|
|
|
1) Why do so many external memory capabilities need to be queried on a
|
|
per-memory-handle-type basis?
|
|
|
|
*PROPOSED RESOLUTION*: This is because some handle types are based on
|
|
OS-native objects that have far more limited capabilities than the very
|
|
generic Vulkan memory objects.
|
|
Not all memory handle types can name memory objects that support 3D images,
|
|
for example.
|
|
Some handle types cannot even support the deferred image and memory binding
|
|
behavior of Vulkan and require specifying the image when allocating or
|
|
importing the memory object.
|
|
|
|
2) Do the slink:VkExternalImageFormatPropertiesKHR and
|
|
slink:VkExternalBufferPropertiesKHR structs need to include a list of memory
|
|
type bits that support the given handle type?
|
|
|
|
*PROPOSED RESOLUTION*: No.
|
|
The memory types that don't support the handle types will simply be filtered
|
|
out of the results returned by flink:vkGetImageMemoryRequirements and
|
|
flink:vkGetBufferMemoryRequirements when a set of handle types was specified
|
|
at image or buffer creation time.
|
|
|
|
3) Should the non-opaque handle types be moved to their own extension?
|
|
|
|
*PROPOSED RESOLUTION*: Perhaps.
|
|
However, defining the handle type bits does very little and does not require
|
|
any platform-specific types on its own, and it's easier to maintain the
|
|
bitfield values in a single extension for now.
|
|
Presumably more handle types could be added by separate extensions though,
|
|
and it would be midly weird to have some platform-specific ones defined in
|
|
the core spec and some in extensions
|
|
|
|
4) Do we need a code:D3D11_TILEPOOL type?
|
|
|
|
*PROPOSED RESOLUTION*: No.
|
|
This is technically possible, but the synchronization is awkward.
|
|
D3D11 surfaces must be synchronized using shared mutexes, and these
|
|
synchronization primitives are shared by the entire memory object, so D3D11
|
|
shared allocations divided among multiple buffer and image bindings may be
|
|
difficult to synchronize.
|
|
|
|
5) Should the Windows 7-compatible handle types be named "`KMT`" handles or
|
|
"`GLOBAL_SHARE`" handles?
|
|
|
|
*PROPOSED RESOLUTION*: KMT, simply because it is more concise.
|
|
|
|
6) How do applications identify compatible devices and drivers across
|
|
instance, process, and API boundaries when sharing memory?
|
|
|
|
*PROPOSED RESOLUTION*: New device properties are exposed that allow
|
|
applications to correctly correlate devices and drivers.
|
|
A device and driver UUID that must both match to ensure sharing
|
|
compatibility between two Vulkan instances, or a Vulkan instance and an
|
|
extensible external API are added.
|
|
To allow correlating with Direct3D devices, a device LUID is added that
|
|
corresponds to a DXGI adapter LUID.
|
|
A driver ID is not needed for Direct3D because mismatched driver component
|
|
versions are not a currently supported configuration on the Windows OS.
|
|
Should support for such configurations be introduced at the OS level,
|
|
further Vulkan extensions would be needed to correlate userspace component
|
|
builds.
|
|
|
|
=== Version History
|
|
|
|
* Revision 1, 2016-10-17 (James Jones)
|
|
- Initial version
|