2017-07-12 00:57:41 +00:00
|
|
|
// Copyright (c) 2016-2017 Khronos Group. This work is licensed under a
|
|
|
|
// Creative Commons Attribution 4.0 International License; see
|
|
|
|
// http://creativecommons.org/licenses/by/4.0/
|
|
|
|
|
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
|
|
|
include::meta/VK_KHR_dedicated_allocation.txt[]
|
2017-07-12 00:57:41 +00:00
|
|
|
|
|
|
|
*Last Modified Date*::
|
Change log for August 14, 2017 Vulkan 1.0.58 spec update:
* Bump API patch number and header version number to 58 for this update.
Github Issues:
* Update the <<interfaces-resources-descset,Descriptor Set Interface>>
section to allow multiple variables with the same descriptor set/binding
decorations, and require that all variables that are statically used
must be consistent with the pipeline layout. Allow
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER to be used with texture
and sampler variables (public issues 522, 524).
Internal Issues:
* Replace networkx package used for extension dependency generation with a
homegrown network dependency traverser (internal issue 713).
* Specify in the <<interfaces-fragmentoutput, Fragment Output Interface>>
section that if a fragment shader writes integers that cannot be
represented in the format of the colour attachment, then the result is
undefined (internal issue 893).
* Separate malformed valid usage statement for
slink:VkPipelineRasterizationStateCreateInfo into two (internal issue
918).
* Fix cases where the term 'pNext chain' is incorrectly used in reference
to functions, rather than their parameters. Replace 'pNext list' with
'pNext chain'. Fixed typo in the example code of
+VK_KHR_dedicated_allocation+ (internal issue 944).
* Fix typo in elink:VkExternalSemaphoreHandleTypeFlagBitsKHR enum
descriptions, replacing
etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR with
ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR, and make the
description more consistent with
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR (internal issue 950).
Other Issues:
* Clarify how pipeline stage masks affect
<<synchronization-pipeline-stages-masks, access and synchronization
scopes>>.
* Clarify that dedicated allocations do not allow aliasing in the
flink:vkBindBufferMemory and flink:vkBindImageMemory valid usage
statements.
* Correct specification of pname:dynamicCount for push_constant token in
slink:VkIndirectCommandsLayoutNVX.
New Extensions:
* `VK_EXT_shader_viewport_index_layer`
2017-08-14 08:58:07 +00:00
|
|
|
2017-08-07
|
2017-07-12 00:57:41 +00:00
|
|
|
*IP Status*::
|
|
|
|
No known IP claims.
|
|
|
|
*Contributors*::
|
|
|
|
- Jeff Bolz, NVIDIA
|
|
|
|
- Jason Ekstrand, Intel
|
|
|
|
|
|
|
|
This extension enables resources to be bound to a dedicated allocation,
|
|
|
|
rather than suballocated.
|
|
|
|
For any particular resource, applications can: query whether a dedicated
|
|
|
|
allocation is recommended, in which case using a dedicated allocation may:
|
|
|
|
improve the performance of access to that resource.
|
|
|
|
Normal device memory allocations must support multiple resources per
|
|
|
|
allocation, memory aliasing and sparse binding, which could interfere with
|
|
|
|
some optimizations.
|
|
|
|
Applications should query the implementation for when a dedicated allocation
|
|
|
|
may: be beneficial by adding sname:VkMemoryDedicatedRequirementsKHR to the
|
Change log for August 14, 2017 Vulkan 1.0.58 spec update:
* Bump API patch number and header version number to 58 for this update.
Github Issues:
* Update the <<interfaces-resources-descset,Descriptor Set Interface>>
section to allow multiple variables with the same descriptor set/binding
decorations, and require that all variables that are statically used
must be consistent with the pipeline layout. Allow
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER to be used with texture
and sampler variables (public issues 522, 524).
Internal Issues:
* Replace networkx package used for extension dependency generation with a
homegrown network dependency traverser (internal issue 713).
* Specify in the <<interfaces-fragmentoutput, Fragment Output Interface>>
section that if a fragment shader writes integers that cannot be
represented in the format of the colour attachment, then the result is
undefined (internal issue 893).
* Separate malformed valid usage statement for
slink:VkPipelineRasterizationStateCreateInfo into two (internal issue
918).
* Fix cases where the term 'pNext chain' is incorrectly used in reference
to functions, rather than their parameters. Replace 'pNext list' with
'pNext chain'. Fixed typo in the example code of
+VK_KHR_dedicated_allocation+ (internal issue 944).
* Fix typo in elink:VkExternalSemaphoreHandleTypeFlagBitsKHR enum
descriptions, replacing
etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR with
ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR, and make the
description more consistent with
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR (internal issue 950).
Other Issues:
* Clarify how pipeline stage masks affect
<<synchronization-pipeline-stages-masks, access and synchronization
scopes>>.
* Clarify that dedicated allocations do not allow aliasing in the
flink:vkBindBufferMemory and flink:vkBindImageMemory valid usage
statements.
* Correct specification of pname:dynamicCount for push_constant token in
slink:VkIndirectCommandsLayoutNVX.
New Extensions:
* `VK_EXT_shader_viewport_index_layer`
2017-08-14 08:58:07 +00:00
|
|
|
pname:pNext chain of the sname:VkMemoryRequirements2KHR structure passed as
|
|
|
|
the pname:pMemoryRequirements parameter to a call to
|
|
|
|
fname:vkGetBufferMemoryRequirements2KHR or
|
|
|
|
fname:vkGetImageMemoryRequirements2KHR.
|
2017-07-12 00:57:41 +00:00
|
|
|
Certain external handle types and external images or buffers may: also
|
|
|
|
depend on dedicated allocations on implementations that associate image or
|
|
|
|
buffer metadata with OS-level memory objects.
|
|
|
|
|
|
|
|
This extension adds a two small structures to memory requirements querying
|
|
|
|
and memory allocation: a new structure that flags whether an image/buffer
|
|
|
|
should have a dedicated allocation, and a structure indicating the image or
|
|
|
|
buffer that an allocation will be bound to.
|
|
|
|
|
|
|
|
=== New Object Types
|
|
|
|
|
|
|
|
None.
|
|
|
|
|
|
|
|
=== New Enum Constants
|
|
|
|
|
|
|
|
* Extending elink:VkStructureType:
|
|
|
|
** ename:VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR
|
|
|
|
** ename:VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR
|
|
|
|
|
|
|
|
=== New Enums
|
|
|
|
|
|
|
|
None.
|
|
|
|
|
|
|
|
=== New Structures
|
|
|
|
|
|
|
|
* slink:VkMemoryDedicatedRequirementsKHR
|
|
|
|
* slink:VkMemoryDedicatedAllocateInfoKHR
|
|
|
|
|
|
|
|
=== New Functions
|
|
|
|
|
|
|
|
None.
|
|
|
|
|
|
|
|
=== Issues
|
|
|
|
|
|
|
|
None.
|
|
|
|
|
|
|
|
=== Examples
|
|
|
|
|
|
|
|
[source,c++]
|
|
|
|
--------------------------------------
|
|
|
|
|
|
|
|
// Create an image with a dedicated allocation based on the
|
|
|
|
// implementation's preference
|
|
|
|
|
|
|
|
VkImageCreateInfo imageCreateInfo =
|
|
|
|
{
|
|
|
|
// Image creation parameters
|
|
|
|
};
|
|
|
|
|
|
|
|
VkImage image;
|
|
|
|
VkResult result = vkCreateImage(
|
|
|
|
device,
|
|
|
|
&imageCreateInfo,
|
|
|
|
NULL, // pAllocator
|
|
|
|
&image);
|
|
|
|
|
|
|
|
VkMemoryDedicatedRequirementsKHR dedicatedRequirements =
|
|
|
|
{
|
|
|
|
VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR,
|
|
|
|
NULL, // pNext
|
|
|
|
};
|
|
|
|
|
|
|
|
VkMemoryRequirements2KHR memoryRequirements =
|
|
|
|
{
|
|
|
|
VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR,
|
Change log for August 14, 2017 Vulkan 1.0.58 spec update:
* Bump API patch number and header version number to 58 for this update.
Github Issues:
* Update the <<interfaces-resources-descset,Descriptor Set Interface>>
section to allow multiple variables with the same descriptor set/binding
decorations, and require that all variables that are statically used
must be consistent with the pipeline layout. Allow
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER to be used with texture
and sampler variables (public issues 522, 524).
Internal Issues:
* Replace networkx package used for extension dependency generation with a
homegrown network dependency traverser (internal issue 713).
* Specify in the <<interfaces-fragmentoutput, Fragment Output Interface>>
section that if a fragment shader writes integers that cannot be
represented in the format of the colour attachment, then the result is
undefined (internal issue 893).
* Separate malformed valid usage statement for
slink:VkPipelineRasterizationStateCreateInfo into two (internal issue
918).
* Fix cases where the term 'pNext chain' is incorrectly used in reference
to functions, rather than their parameters. Replace 'pNext list' with
'pNext chain'. Fixed typo in the example code of
+VK_KHR_dedicated_allocation+ (internal issue 944).
* Fix typo in elink:VkExternalSemaphoreHandleTypeFlagBitsKHR enum
descriptions, replacing
etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR with
ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR, and make the
description more consistent with
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR (internal issue 950).
Other Issues:
* Clarify how pipeline stage masks affect
<<synchronization-pipeline-stages-masks, access and synchronization
scopes>>.
* Clarify that dedicated allocations do not allow aliasing in the
flink:vkBindBufferMemory and flink:vkBindImageMemory valid usage
statements.
* Correct specification of pname:dynamicCount for push_constant token in
slink:VkIndirectCommandsLayoutNVX.
New Extensions:
* `VK_EXT_shader_viewport_index_layer`
2017-08-14 08:58:07 +00:00
|
|
|
&dedicatedRequirements, // pNext
|
2017-07-12 00:57:41 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const VkImageMemoryRequirementsInfo2KHR imageRequirementsInfo =
|
|
|
|
{
|
|
|
|
VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR,
|
|
|
|
NULL, // pNext
|
|
|
|
image
|
|
|
|
};
|
|
|
|
|
|
|
|
vkGetImageMemoryRequirements2KHR(
|
|
|
|
device,
|
|
|
|
&imageRequirementsInfo,
|
|
|
|
&memoryRequirements);
|
|
|
|
|
|
|
|
if (dedicatedRequirements.prefersDedicatedAllocation) {
|
|
|
|
// Allocate memory with VkMemoryDedicatedAllocateInfoKHR::image
|
|
|
|
// pointing to the image we are allocating the memory for
|
|
|
|
|
|
|
|
VkMemoryDedicatedAllocateInfoKHR dedicatedInfo =
|
|
|
|
{
|
|
|
|
VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR, // sType
|
|
|
|
NULL, // pNext
|
|
|
|
image, // image
|
|
|
|
VK_NULL_HANDLE, // buffer
|
|
|
|
};
|
|
|
|
|
|
|
|
VkMemoryAllocateInfo memoryAllocateInfo =
|
|
|
|
{
|
|
|
|
VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // sType
|
|
|
|
&dedicatedInfo, // pNext
|
|
|
|
memoryRequirements.size, // allocationSize
|
|
|
|
FindMemoryTypeIndex(memoryRequirements.memoryTypeBits), // memoryTypeIndex
|
|
|
|
};
|
|
|
|
|
|
|
|
VkDeviceMemory memory;
|
|
|
|
vkAllocateMemory(
|
|
|
|
device,
|
|
|
|
&memoryAllocateInfo,
|
|
|
|
NULL, // pAllocator
|
|
|
|
&memory);
|
|
|
|
|
|
|
|
// Bind the image to the memory
|
|
|
|
|
|
|
|
vkBindImageMemory(
|
|
|
|
device,
|
|
|
|
image,
|
|
|
|
memory,
|
|
|
|
0);
|
|
|
|
} else {
|
|
|
|
// Take the normal memory sub-allocation path
|
|
|
|
}
|
|
|
|
|
|
|
|
--------------------------------------
|
|
|
|
|
|
|
|
=== Version History
|
|
|
|
|
|
|
|
* Revision 1, 2017-02-27 (James Jones)
|
|
|
|
- Copy content from VK_NV_dedicated_allocation
|
|
|
|
- Add some references to external object interactions to the overview.
|
|
|
|
|
|
|
|
* Revision 2, 2017-03-27 (Jason Ekstrand)
|
|
|
|
- Rework the extension to be query-based
|
Change log for August 14, 2017 Vulkan 1.0.58 spec update:
* Bump API patch number and header version number to 58 for this update.
Github Issues:
* Update the <<interfaces-resources-descset,Descriptor Set Interface>>
section to allow multiple variables with the same descriptor set/binding
decorations, and require that all variables that are statically used
must be consistent with the pipeline layout. Allow
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER to be used with texture
and sampler variables (public issues 522, 524).
Internal Issues:
* Replace networkx package used for extension dependency generation with a
homegrown network dependency traverser (internal issue 713).
* Specify in the <<interfaces-fragmentoutput, Fragment Output Interface>>
section that if a fragment shader writes integers that cannot be
represented in the format of the colour attachment, then the result is
undefined (internal issue 893).
* Separate malformed valid usage statement for
slink:VkPipelineRasterizationStateCreateInfo into two (internal issue
918).
* Fix cases where the term 'pNext chain' is incorrectly used in reference
to functions, rather than their parameters. Replace 'pNext list' with
'pNext chain'. Fixed typo in the example code of
+VK_KHR_dedicated_allocation+ (internal issue 944).
* Fix typo in elink:VkExternalSemaphoreHandleTypeFlagBitsKHR enum
descriptions, replacing
etext:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FENCE_FD_BIT_KHR with
ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR, and make the
description more consistent with
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR (internal issue 950).
Other Issues:
* Clarify how pipeline stage masks affect
<<synchronization-pipeline-stages-masks, access and synchronization
scopes>>.
* Clarify that dedicated allocations do not allow aliasing in the
flink:vkBindBufferMemory and flink:vkBindImageMemory valid usage
statements.
* Correct specification of pname:dynamicCount for push_constant token in
slink:VkIndirectCommandsLayoutNVX.
New Extensions:
* `VK_EXT_shader_viewport_index_layer`
2017-08-14 08:58:07 +00:00
|
|
|
|
|
|
|
* Revision 3, 2017-07-31 (Jason Ekstrand)
|
|
|
|
- Clarify that memory objects created with
|
|
|
|
VkMemoryDedicatedAllocateInfoKHR can only have the specified resource
|
|
|
|
bound and no others.
|