Change log for October 27, 2017 Vulkan 1.0.65 spec update:
* Bump API patch number and header version number to 65 for this update. Github Issues: * Replaced inaccurate "`pixel`" with "`texel`" or "`compressed texel block`" as appropriate in the <<sparsememory, Sparse Resources>> chapter (public issue 86). * Attempt to clarify security/integrity guarantees in the <<fundamentals-errors, Errors>> section (public issue 147). * Update the <<memory-device,Device Memory>> section with clarifications and markup fixes (public pull request 194). * Fix typo VkDeviceCreateInfo -> slink:VkDebugMarkerObjectNameInfoEXT in sample code for `VK_EXT_debug_marker` extension (public pull request 227). * Clarified slink:VkFramebufferCreateInfo language regarding concurrent use of attachment resources during a render pass instance (public issue 299). * Added overlap rules for destination regions in <<copies,copy commands>>. Also unified the sparse and non-sparse source-destination overlap rules, since the non-sparse rules were technically inaccurate in the face of aliasing in flink:vkBindMemory2 - the new rules are true regardless (public issue 317). * Clarified the <<features-features-samplerAnisotropy, pname:samplerAnisotropy feature>> to only affect the slink:VkSamplerCreateInfo::pname:anisotropyEnable value, and that pname:maxAnisotropy is ignored when pname:anisotropyEnable is VK_FALSE (public issue 503). * Clarify pointer valid usage statements to use "`valid pointer to valid _object_`" terminology and update the <<fundamentals-validusage-pointers,Valid Usage for Pointers>> section accordingly (public pull request 547). * Some operations that use integer coordinates can also accept a LOD to sample from. Add a description of that selection and the validity conditions in the new <<textures-integer-coordinate-operations, Integer Texel Coordinate Operations>> section (public issue 548). * Update stext:VkImageSubresource* valid usage statements (public pull request 550). * Added text tying ename:VK_OUT_OF_POOL_MEMORY error for flink:vkAllocateDescriptorSets to the number of descriptor types in the allocating pool. Removed redundant "`length`" text about number of descriptors returned (public issue 582). * Update slink:VkSwapchainCreateInfoKHR descriptions (public pull request 585). * Update slink:VkPipelineViewportWScalingStateCreateInfoNV and related structures' valid usage statements (public pull request 587). * Change some dates to conform to ISO 8601 as specified in the style guide (public pull request 601). * Fix some math markup problems and be more consistent in use of asciidoc math markup (public pull request 602). Internal Issues: * Clarified that attribute reads from incomplete vertex buffer elements are considered out of bounds accesses, in the slink:VkPhysicalDeviceFeatures and flink:vkCmdBindVertexBuffers.txt sections (internal issue 842). Other Issues: New Extensions:
This commit is contained in:
parent
392384a31b
commit
0a1c49409f
|
@ -92,7 +92,7 @@ VERBOSE =
|
||||||
# $(EXTENSIONS))
|
# $(EXTENSIONS))
|
||||||
# ADOCOPTS options for asciidoc->HTML5 output
|
# ADOCOPTS options for asciidoc->HTML5 output
|
||||||
NOTEOPTS = -a editing-notes -a implementation-guide
|
NOTEOPTS = -a editing-notes -a implementation-guide
|
||||||
SPECREVISION = 1.0.64
|
SPECREVISION = 1.0.65
|
||||||
# Spell out ISO 8601 format as not all date commands support --rfc-3339
|
# Spell out ISO 8601 format as not all date commands support --rfc-3339
|
||||||
SPECDATE = $(shell echo `date -u "+%Y-%m-%d %TZ"`)
|
SPECDATE = $(shell echo `date -u "+%Y-%m-%d %TZ"`)
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ objects in error messages.
|
||||||
PFN_vkDebugMarkerSetObjectNameEXT pfnDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT");
|
PFN_vkDebugMarkerSetObjectNameEXT pfnDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT");
|
||||||
|
|
||||||
// Set a name on the image
|
// Set a name on the image
|
||||||
const VkDeviceCreateInfo imageNameInfo =
|
const VkDebugMarkerObjectNameInfoEXT imageNameInfo =
|
||||||
{
|
{
|
||||||
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, // sType
|
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, // sType
|
||||||
NULL, // pNext
|
NULL, // pNext
|
||||||
|
|
|
@ -23,7 +23,8 @@ allows application code to re-orient three-dimensional geometry with a view
|
||||||
the "Issues" section below.
|
the "Issues" section below.
|
||||||
along any of the *X*, *Y*, or *Z* axes.
|
along any of the *X*, *Y*, or *Z* axes.
|
||||||
If a perspective projection and depth buffering is required, [eq]#1/W#
|
If a perspective projection and depth buffering is required, [eq]#1/W#
|
||||||
buffering should be used, as described in the single-pass cubemap rendering example in
|
buffering should be used, as described in the single-pass cubemap rendering
|
||||||
|
example in
|
||||||
|
|
||||||
|
|
||||||
=== New Object Types
|
=== New Object Types
|
||||||
|
|
|
@ -119,8 +119,8 @@ include::../../api/structs/VkSwapchainCreateInfoKHR.txt[]
|
||||||
application needs.
|
application needs.
|
||||||
The implementation will either create the swapchain with at least that
|
The implementation will either create the swapchain with at least that
|
||||||
many images, or it will fail to create the swapchain.
|
many images, or it will fail to create the swapchain.
|
||||||
* pname:imageFormat is a elink:VkFormat value specifying the format
|
* pname:imageFormat is a elink:VkFormat value specifying the format the
|
||||||
the swapchain image(s) will be created with.
|
swapchain image(s) will be created with.
|
||||||
* pname:imageColorSpace is a slink:VkColorSpaceKHR value specifying the
|
* pname:imageColorSpace is a slink:VkColorSpaceKHR value specifying the
|
||||||
way the swapchain interprets image data.
|
way the swapchain interprets image data.
|
||||||
* pname:imageExtent is the size (in pixels) of the swapchain image(s).
|
* pname:imageExtent is the size (in pixels) of the swapchain image(s).
|
||||||
|
@ -170,8 +170,8 @@ is minimized.
|
||||||
A swapchain's present mode determines how incoming present requests will
|
A swapchain's present mode determines how incoming present requests will
|
||||||
be processed and queued internally.
|
be processed and queued internally.
|
||||||
* pname:clipped indicates whether the Vulkan implementation is allowed to
|
* pname:clipped indicates whether the Vulkan implementation is allowed to
|
||||||
discard rendering operations that affect regions of the surface that
|
discard rendering operations that affect regions of the surface that are
|
||||||
are not visible.
|
not visible.
|
||||||
** If set to ename:VK_TRUE, the presentable images associated with the
|
** If set to ename:VK_TRUE, the presentable images associated with the
|
||||||
swapchain may: not own all of their pixels.
|
swapchain may: not own all of their pixels.
|
||||||
Pixels in the presentable images that correspond to regions of the
|
Pixels in the presentable images that correspond to regions of the
|
||||||
|
@ -180,9 +180,8 @@ is minimized.
|
||||||
back.
|
back.
|
||||||
Pixel shaders may: not execute for these pixels, and thus any side
|
Pixel shaders may: not execute for these pixels, and thus any side
|
||||||
effects they would have had will not occur.
|
effects they would have had will not occur.
|
||||||
ename:VK_TRUE value does not guarantee any clipping
|
ename:VK_TRUE value does not guarantee any clipping will occur, but
|
||||||
will occur, but allows more optimal presentation methods to be used on
|
allows more optimal presentation methods to be used on some platforms.
|
||||||
some platforms.
|
|
||||||
** If set to ename:VK_FALSE, presentable images associated with the
|
** If set to ename:VK_FALSE, presentable images associated with the
|
||||||
swapchain will own all of the pixels they contain.
|
swapchain will own all of the pixels they contain.
|
||||||
|
|
||||||
|
@ -201,16 +200,16 @@ effects that require them to run for all pixels in the presentable image.
|
||||||
also allows the application to still present any images that are already
|
also allows the application to still present any images that are already
|
||||||
acquired from it.
|
acquired from it.
|
||||||
|
|
||||||
Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that
|
Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that is
|
||||||
is not dlink:VK_NULL_HANDLE, pname:oldSwapchain is retired -- even if
|
not dlink:VK_NULL_HANDLE, pname:oldSwapchain is retired -- even if creation
|
||||||
creation of the new swapchain fails.
|
of the new swapchain fails.
|
||||||
The new swapchain is created in the non-retired state whether or not
|
The new swapchain is created in the non-retired state whether or not
|
||||||
pname:oldSwapchain is dlink:VK_NULL_HANDLE.
|
pname:oldSwapchain is dlink:VK_NULL_HANDLE.
|
||||||
|
|
||||||
Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that
|
Upon calling fname:vkCreateSwapchainKHR with a pname:oldSwapchain that is
|
||||||
is not dlink:VK_NULL_HANDLE, any images from pname:oldSwapchain that are
|
not dlink:VK_NULL_HANDLE, any images from pname:oldSwapchain that are not
|
||||||
not acquired by the application may: be freed by the implementation,
|
acquired by the application may: be freed by the implementation, which may:
|
||||||
which may: occur even if creation of the new swapchain fails.
|
occur even if creation of the new swapchain fails.
|
||||||
The application can: destroy pname:oldSwapchain to free all memory
|
The application can: destroy pname:oldSwapchain to free all memory
|
||||||
associated with pname:oldSwapchain.
|
associated with pname:oldSwapchain.
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,9 @@ endif::VK_KHR_shared_presentable_image[]
|
||||||
elements of the pname:pRanges array must: each be less than the
|
elements of the pname:pRanges array must: each be less than the
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* For each slink:VkImageSubresourceRange element of pname:pRanges, if
|
* [[VUID-vkCmdClearColorImage-pRanges-01692]]
|
||||||
the pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
|
For each slink:VkImageSubresourceRange element of pname:pRanges, if the
|
||||||
|
pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
|
||||||
[eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than the
|
[eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than the
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
|
@ -98,8 +99,9 @@ endif::VK_KHR_shared_presentable_image[]
|
||||||
elements of the pname:pRanges array must: each be less than the
|
elements of the pname:pRanges array must: each be less than the
|
||||||
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* For each slink:VkImageSubresourceRange element of pname:pRanges, if
|
* [[VUID-vkCmdClearColorImage-pRanges-01693]]
|
||||||
the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
|
For each slink:VkImageSubresourceRange element of pname:pRanges, if the
|
||||||
|
pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
|
||||||
[eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than
|
[eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than
|
||||||
the pname:arrayLayers specified in slink:VkImageCreateInfo when
|
the pname:arrayLayers specified in slink:VkImageCreateInfo when
|
||||||
pname:image was created
|
pname:image was created
|
||||||
|
@ -170,8 +172,9 @@ endif::VK_KHR_maintenance1[]
|
||||||
elements of the pname:pRanges array must: each be less than the
|
elements of the pname:pRanges array must: each be less than the
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* For each slink:VkImageSubresourceRange element of pname:pRanges, if
|
* [[VUID-vkCmdClearDepthStencilImage-pRanges-01694]]
|
||||||
the pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
|
For each slink:VkImageSubresourceRange element of pname:pRanges, if the
|
||||||
|
pname:levelCount member is not ename:VK_REMAINING_MIP_LEVELS, then
|
||||||
[eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than the
|
[eq]#pname:baseMipLevel {plus} pname:levelCount# must: be less than the
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
|
@ -180,8 +183,9 @@ endif::VK_KHR_maintenance1[]
|
||||||
elements of the pname:pRanges array must: each be less than the
|
elements of the pname:pRanges array must: each be less than the
|
||||||
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* For each slink:VkImageSubresourceRange element of pname:pRanges, if
|
* [[VUID-vkCmdClearDepthStencilImage-pRanges-01695]]
|
||||||
the pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
|
For each slink:VkImageSubresourceRange element of pname:pRanges, if the
|
||||||
|
pname:layerCount member is not ename:VK_REMAINING_ARRAY_LAYERS, then
|
||||||
[eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than
|
[eq]#pname:baseArrayLayer {plus} pname:layerCount# must: be less than
|
||||||
the pname:arrayLayers specified in slink:VkImageCreateInfo when
|
the pname:arrayLayers specified in slink:VkImageCreateInfo when
|
||||||
pname:image was created
|
pname:image was created
|
||||||
|
|
|
@ -20,15 +20,13 @@ fname:vkCmdResolveImage.
|
||||||
|
|
||||||
== Common Operation
|
== Common Operation
|
||||||
|
|
||||||
Some rules for valid operation are common to all copy commands:
|
The following valid usage rules apply to all copy commands:
|
||||||
|
|
||||||
* Copy commands must: be recorded outside of a render pass instance.
|
* Copy commands must: be recorded outside of a render pass instance.
|
||||||
* For non-sparse resources, the union of the source regions in a given
|
* The set of all bytes bound to all the source regions must: not overlap
|
||||||
buffer or image must: not overlap the union of the destination regions
|
the set of all bytes bound to the destination regions.
|
||||||
in the same buffer or image.
|
* The set of all bytes bound to each destination region must: not overlap
|
||||||
* For sparse resources, the set of bytes used by all the source regions
|
the set of all bytes bound to another destination region.
|
||||||
must: not intersect the set of bytes used by all the destination
|
|
||||||
regions.
|
|
||||||
* Copy regions must: be non-empty.
|
* Copy regions must: be non-empty.
|
||||||
* Regions must: not extend outside the bounds of the buffer or image
|
* Regions must: not extend outside the bounds of the buffer or image
|
||||||
level, except that regions of compressed images can: extend as far as
|
level, except that regions of compressed images can: extend as far as
|
||||||
|
@ -436,17 +434,21 @@ ifdef::VK_KHR_sampler_ycbcr_conversion[]
|
||||||
endif::VK_KHR_sampler_ycbcr_conversion[]
|
endif::VK_KHR_sampler_ycbcr_conversion[]
|
||||||
* [[VUID-vkCmdCopyImage-srcImage-00136]]
|
* [[VUID-vkCmdCopyImage-srcImage-00136]]
|
||||||
The sample count of pname:srcImage and pname:dstImage must: match
|
The sample count of pname:srcImage and pname:dstImage must: match
|
||||||
* The pname:srcSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdCopyImage-srcSubresource-01696]]
|
||||||
|
The pname:srcSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
* The pname:dstSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdCopyImage-dstSubresource-01697]]
|
||||||
|
The pname:dstSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
* The [eq]#pname:srcSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdCopyImage-srcSubresource-01698]]
|
||||||
|
The [eq]#pname:srcSubresource.baseArrayLayer {plus}
|
||||||
pname:srcSubresource.layerCount# of each element of pname:pRegions must:
|
pname:srcSubresource.layerCount# of each element of pname:pRegions must:
|
||||||
be less than or equal to the pname:arrayLayers specified in
|
be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
* The [eq]#pname:dstSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdCopyImage-dstSubresource-01699]]
|
||||||
|
The [eq]#pname:dstSubresource.baseArrayLayer {plus}
|
||||||
pname:dstSubresource.layerCount# of each element of pname:pRegions must:
|
pname:dstSubresource.layerCount# of each element of pname:pRegions must:
|
||||||
be less than or equal to the pname:arrayLayers specified in
|
be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
|
@ -718,7 +720,8 @@ include::../api/structs/VkImageSubresourceLayers.txt[]
|
||||||
ename:VK_IMAGE_ASPECT_STENCIL_BIT
|
ename:VK_IMAGE_ASPECT_STENCIL_BIT
|
||||||
* [[VUID-VkImageSubresourceLayers-aspectMask-00168]]
|
* [[VUID-VkImageSubresourceLayers-aspectMask-00168]]
|
||||||
pname:aspectMask must: not contain ename:VK_IMAGE_ASPECT_METADATA_BIT
|
pname:aspectMask must: not contain ename:VK_IMAGE_ASPECT_METADATA_BIT
|
||||||
* pname:layerCount must: be greater than 0
|
* [[VUID-VkImageSubresourceLayers-layerCount-01700]]
|
||||||
|
pname:layerCount must: be greater than 0
|
||||||
****
|
****
|
||||||
|
|
||||||
include::../validity/structs/VkImageSubresourceLayers.txt[]
|
include::../validity/structs/VkImageSubresourceLayers.txt[]
|
||||||
|
@ -826,10 +829,12 @@ ifdef::VK_KHR_shared_presentable_image[]
|
||||||
ename:VK_IMAGE_LAYOUT_GENERAL, or
|
ename:VK_IMAGE_LAYOUT_GENERAL, or
|
||||||
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
|
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
|
||||||
endif::VK_KHR_shared_presentable_image[]
|
endif::VK_KHR_shared_presentable_image[]
|
||||||
* The pname:imageSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdCopyBufferToImage-imageSubresource-01701]]
|
||||||
|
The pname:imageSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
* The [eq]#pname:imageSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdCopyBufferToImage-imageSubresource-01702]]
|
||||||
|
The [eq]#pname:imageSubresource.baseArrayLayer {plus}
|
||||||
pname:imageSubresource.layerCount# of each element of pname:pRegions
|
pname:imageSubresource.layerCount# of each element of pname:pRegions
|
||||||
must: be less than or equal to the pname:arrayLayers specified in
|
must: be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
|
@ -934,10 +939,12 @@ endif::VK_KHR_shared_presentable_image[]
|
||||||
* [[VUID-vkCmdCopyImageToBuffer-dstBuffer-00192]]
|
* [[VUID-vkCmdCopyImageToBuffer-dstBuffer-00192]]
|
||||||
If pname:dstBuffer is non-sparse then it must: be bound completely and
|
If pname:dstBuffer is non-sparse then it must: be bound completely and
|
||||||
contiguously to a single sname:VkDeviceMemory object
|
contiguously to a single sname:VkDeviceMemory object
|
||||||
* The pname:imageSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdCopyImageToBuffer-imageSubresource-01703]]
|
||||||
|
The pname:imageSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
* The [eq]#pname:imageSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdCopyImageToBuffer-imageSubresource-01704]]
|
||||||
|
The [eq]#pname:imageSubresource.baseArrayLayer {plus}
|
||||||
pname:imageSubresource.layerCount# of each element of pname:pRegions
|
pname:imageSubresource.layerCount# of each element of pname:pRegions
|
||||||
must: be less than or equal to the pname:arrayLayers specified in
|
must: be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
|
@ -1472,17 +1479,21 @@ ifdef::VK_IMG_filter_cubic[]
|
||||||
If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: have
|
If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: have
|
||||||
a elink:VkImageType of ename:VK_IMAGE_TYPE_3D
|
a elink:VkImageType of ename:VK_IMAGE_TYPE_3D
|
||||||
endif::VK_IMG_filter_cubic[]
|
endif::VK_IMG_filter_cubic[]
|
||||||
* The pname:srcSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdBlitImage-srcSubresource-01705]]
|
||||||
|
The pname:srcSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
* The pname:dstSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdBlitImage-dstSubresource-01706]]
|
||||||
|
The pname:dstSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
* The [eq]#pname:srcSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdBlitImage-srcSubresource-01707]]
|
||||||
|
The [eq]#pname:srcSubresource.baseArrayLayer {plus}
|
||||||
pname:srcSubresource.layerCount# of each element of pname:pRegions must:
|
pname:srcSubresource.layerCount# of each element of pname:pRegions must:
|
||||||
be less than or equal to the pname:arrayLayers specified in
|
be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
* The [eq]#pname:dstSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdBlitImage-dstSubresource-01708]]
|
||||||
|
The [eq]#pname:dstSubresource.baseArrayLayer {plus}
|
||||||
pname:dstSubresource.layerCount# of each element of pname:pRegions must:
|
pname:dstSubresource.layerCount# of each element of pname:pRegions must:
|
||||||
be less than or equal to the pname:arrayLayers specified in
|
be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
|
@ -1686,17 +1697,21 @@ endif::VK_KHR_shared_presentable_image[]
|
||||||
* [[VUID-vkCmdResolveImage-srcImage-01386]]
|
* [[VUID-vkCmdResolveImage-srcImage-01386]]
|
||||||
pname:srcImage and pname:dstImage must: have been created with the same
|
pname:srcImage and pname:dstImage must: have been created with the same
|
||||||
image format
|
image format
|
||||||
* The pname:srcSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdResolveImage-srcSubresource-01709]]
|
||||||
|
The pname:srcSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
* The pname:dstSubresource.mipLevel member of each element of
|
* [[VUID-vkCmdResolveImage-dstSubresource-01710]]
|
||||||
|
The pname:dstSubresource.mipLevel member of each element of
|
||||||
pname:pRegions must: be less than the pname:mipLevels specified in
|
pname:pRegions must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
* The [eq]#pname:srcSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdResolveImage-srcSubresource-01711]]
|
||||||
|
The [eq]#pname:srcSubresource.baseArrayLayer {plus}
|
||||||
pname:srcSubresource.layerCount# of each element of pname:pRegions must:
|
pname:srcSubresource.layerCount# of each element of pname:pRegions must:
|
||||||
be less than or equal to the pname:arrayLayers specified in
|
be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:srcImage was created
|
slink:VkImageCreateInfo when pname:srcImage was created
|
||||||
* The [eq]#pname:dstSubresource.baseArrayLayer {plus}
|
* [[VUID-vkCmdResolveImage-dstSubresource-01712]]
|
||||||
|
The [eq]#pname:dstSubresource.baseArrayLayer {plus}
|
||||||
pname:dstSubresource.layerCount# of each element of pname:pRegions must:
|
pname:dstSubresource.layerCount# of each element of pname:pRegions must:
|
||||||
be less than or equal to the pname:arrayLayers specified in
|
be less than or equal to the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:dstImage was created
|
slink:VkImageCreateInfo when pname:dstImage was created
|
||||||
|
|
|
@ -1535,8 +1535,6 @@ include::../api/protos/vkAllocateDescriptorSets.txt[]
|
||||||
allocation.
|
allocation.
|
||||||
* pname:pDescriptorSets is a pointer to an array of sname:VkDescriptorSet
|
* pname:pDescriptorSets is a pointer to an array of sname:VkDescriptorSet
|
||||||
handles in which the resulting descriptor set objects are returned.
|
handles in which the resulting descriptor set objects are returned.
|
||||||
The array must: be at least the length specified by the
|
|
||||||
pname:descriptorSetCount member of pname:pAllocateInfo.
|
|
||||||
|
|
||||||
The allocated descriptor sets are returned in pname:pDescriptorSets.
|
The allocated descriptor sets are returned in pname:pDescriptorSets.
|
||||||
|
|
||||||
|
@ -1555,6 +1553,16 @@ This means applications need not populate unused entries with dummy
|
||||||
descriptors.
|
descriptors.
|
||||||
|
|
||||||
ifdef::VK_KHR_maintenance1[]
|
ifdef::VK_KHR_maintenance1[]
|
||||||
|
If a call to fname:vkAllocateDescriptorSets would cause the total number of
|
||||||
|
descriptor sets allocated from the pool to exceed the value of
|
||||||
|
slink:VkDescriptorPoolCreateInfo::pname:maxSets used to create
|
||||||
|
pname:pAllocateInfo->pname:descriptorPool, then the allocation may: fail due
|
||||||
|
to lack of space in the descriptor pool.
|
||||||
|
Similarly, the allocation may: fail due to lack of space if the call to
|
||||||
|
fname:vkAllocateDescriptorSets would cause the number of any given
|
||||||
|
descriptor type to exceed the sum of all the pname:descriptorCount members
|
||||||
|
of each element of slink:VkDescriptorPoolCreateInfo::pname:pPoolSizes with a
|
||||||
|
pname:member equal to that type.
|
||||||
If the allocation fails due to no more space in the descriptor pool, and not
|
If the allocation fails due to no more space in the descriptor pool, and not
|
||||||
because of system or device memory exhaustion, then
|
because of system or device memory exhaustion, then
|
||||||
ename:VK_ERROR_OUT_OF_POOL_MEMORY_KHR must: be returned.
|
ename:VK_ERROR_OUT_OF_POOL_MEMORY_KHR must: be returned.
|
||||||
|
|
|
@ -210,13 +210,20 @@ used.
|
||||||
** Out-of-bounds atomics may: modify values within the memory range(s)
|
** Out-of-bounds atomics may: modify values within the memory range(s)
|
||||||
bound to the buffer, but must: not modify any other memory, and return
|
bound to the buffer, but must: not modify any other memory, and return
|
||||||
an undefined value.
|
an undefined value.
|
||||||
** Vertex input attributes are considered out of bounds if the address of
|
** Vertex input attributes are considered out of bounds if the offset of
|
||||||
the attribute plus the size of the attribute is greater than the size
|
the attribute in the bound vertex buffer range plus the size of the
|
||||||
of the bound buffer.
|
attribute is greater than either:
|
||||||
Further, if any vertex input attribute using a specific vertex input
|
+
|
||||||
binding is out of bounds, then all vertex input attributes using that
|
*** code:vertexBufferRangeSize, if [eq]#code:bindingStride == 0#; or
|
||||||
vertex input binding for that vertex shader invocation are considered
|
*** [eq]#(code:vertexBufferRangeSize - (code:vertexBufferRangeSize %
|
||||||
out of bounds.
|
code:bindingStride))#
|
||||||
|
+
|
||||||
|
where code:vertexBufferRangeSize is the byte size of the memory range bound
|
||||||
|
to the vertex buffer binding and code:bindingStride is the byte stride of
|
||||||
|
the corresponding vertex input binding.
|
||||||
|
Further, if any vertex input attribute using a specific vertex input binding
|
||||||
|
is out of bounds, then all vertex input attributes using that vertex input
|
||||||
|
binding for that vertex shader invocation are considered out of bounds.
|
||||||
*** If a vertex input attribute is out of bounds, it will be assigned one
|
*** If a vertex input attribute is out of bounds, it will be assigned one
|
||||||
of the following values:
|
of the following values:
|
||||||
**** Values from anywhere within the memory range(s) bound to the buffer,
|
**** Values from anywhere within the memory range(s) bound to the buffer,
|
||||||
|
@ -372,8 +379,8 @@ used.
|
||||||
must: be 0.
|
must: be 0.
|
||||||
* [[features-features-samplerAnisotropy]] pname:samplerAnisotropy
|
* [[features-features-samplerAnisotropy]] pname:samplerAnisotropy
|
||||||
indicates whether anisotropic filtering is supported.
|
indicates whether anisotropic filtering is supported.
|
||||||
If this feature is not enabled, the pname:maxAnisotropy member of the
|
If this feature is not enabled, the pname:anisotropyEnable member of the
|
||||||
sname:VkSamplerCreateInfo structure must: be 1.0.
|
sname:VkSamplerCreateInfo structure must: be ename:VK_FALSE.
|
||||||
* [[features-features-textureCompressionETC2]]
|
* [[features-features-textureCompressionETC2]]
|
||||||
pname:textureCompressionETC2 indicates whether all of the ETC2 and EAC
|
pname:textureCompressionETC2 indicates whether all of the ETC2 and EAC
|
||||||
compressed texture formats are supported.
|
compressed texture formats are supported.
|
||||||
|
|
|
@ -673,8 +673,24 @@ core layer to an application using the API incorrectly is undefined, and
|
||||||
may: include program termination.
|
may: include program termination.
|
||||||
However, implementations must: ensure that incorrect usage by an application
|
However, implementations must: ensure that incorrect usage by an application
|
||||||
does not affect the integrity of the operating system, the Vulkan
|
does not affect the integrity of the operating system, the Vulkan
|
||||||
implementation, or other Vulkan client applications in the system, and does
|
implementation, or other Vulkan client applications in the system.
|
||||||
not allow one application to access data belonging to another application.
|
In particular, any guarantees made by an operating system about whether
|
||||||
|
memory from one process can: be visible to another process or not must: not
|
||||||
|
be violated by a Vulkan implementation for *any memory allocation*.
|
||||||
|
Vulkan implementations are not required: to make additional security or
|
||||||
|
integrity guarantees beyond those provided by the OS unless explicitly
|
||||||
|
directed by the application's use of a particular feature or extension (e.g.
|
||||||
|
via <<features-features-robustBufferAccess, robust buffer access>>).
|
||||||
|
|
||||||
|
[NOTE]
|
||||||
|
.Note
|
||||||
|
====
|
||||||
|
For instance, if an operating system guarantees that data in all its memory
|
||||||
|
allocations are set to zero when newly allocated, the Vulkan implementation
|
||||||
|
must: make the same guarantees for any allocations it controls (e.g.
|
||||||
|
slink:VkDeviceMemory).
|
||||||
|
====
|
||||||
|
|
||||||
Applications can: request stronger robustness guarantees by enabling the
|
Applications can: request stronger robustness guarantees by enabling the
|
||||||
pname:robustBufferAccess feature as described in <<features>>.
|
pname:robustBufferAccess feature as described in <<features>>.
|
||||||
|
|
||||||
|
|
|
@ -451,11 +451,11 @@ include::../validity/protos/vkCmdBindVertexBuffers.txt[]
|
||||||
The address of each attribute for each code:vertexIndex and
|
The address of each attribute for each code:vertexIndex and
|
||||||
code:instanceIndex is calculated as follows:
|
code:instanceIndex is calculated as follows:
|
||||||
|
|
||||||
* Let attribDesc be the member of
|
* Let code:attribDesc be the member of
|
||||||
sname:VkPipelineVertexInputStateCreateInfo::pname:pVertexAttributeDescriptions
|
sname:VkPipelineVertexInputStateCreateInfo::pname:pVertexAttributeDescriptions
|
||||||
with sname:VkVertexInputAttributeDescription::pname:location equal to
|
with sname:VkVertexInputAttributeDescription::pname:location equal to
|
||||||
the vertex input attribute number.
|
the vertex input attribute number.
|
||||||
* Let bindingDesc be the member of
|
* Let code:bindingDesc be the member of
|
||||||
sname:VkPipelineVertexInputStateCreateInfo::pname:pVertexBindingDescriptions
|
sname:VkPipelineVertexInputStateCreateInfo::pname:pVertexBindingDescriptions
|
||||||
with sname:VkVertexInputAttributeDescription::pname:binding equal to
|
with sname:VkVertexInputAttributeDescription::pname:binding equal to
|
||||||
attribDesc.binding.
|
attribDesc.binding.
|
||||||
|
|
|
@ -1174,8 +1174,8 @@ The variable decorated with code:FragStencilRefEXT must: be declared as a
|
||||||
scalar integer value.
|
scalar integer value.
|
||||||
Only the least significant *s* bits of the integer value of the variable
|
Only the least significant *s* bits of the integer value of the variable
|
||||||
decorated with code:FragStencilRefEXT are considered for stencil testing,
|
decorated with code:FragStencilRefEXT are considered for stencil testing,
|
||||||
where *s* is the number of bits in the stencil framebuffer attachment,
|
where *s* is the number of bits in the stencil framebuffer attachment, and
|
||||||
and higher order bits are discarded.
|
higher order bits are discarded.
|
||||||
|
|
||||||
endif::VK_EXT_shader_stencil_export[]
|
endif::VK_EXT_shader_stencil_export[]
|
||||||
|
|
||||||
|
|
|
@ -446,9 +446,9 @@ endif::VK_EXT_validation_cache[]
|
||||||
[[memory-device]]
|
[[memory-device]]
|
||||||
== Device Memory
|
== Device Memory
|
||||||
|
|
||||||
_Device memory_ is memory that is visible to the device -- for example
|
_Device memory_ is memory that is visible to the device -- for example the
|
||||||
the contents of the image or buffer objects, which can: be natively used by
|
contents of the image or buffer objects, which can: be natively used by the
|
||||||
the device.
|
device.
|
||||||
|
|
||||||
Memory properties of a physical device describe the memory heaps and memory
|
Memory properties of a physical device describe the memory heaps and memory
|
||||||
types available.
|
types available.
|
||||||
|
@ -569,14 +569,12 @@ There is no ordering requirement between *X* and *Y* elements for the case
|
||||||
their pname:propertyFlags members are not in a subset relation.
|
their pname:propertyFlags members are not in a subset relation.
|
||||||
That potentially allows more than one possible way to order the same set of
|
That potentially allows more than one possible way to order the same set of
|
||||||
memory types.
|
memory types.
|
||||||
Notice that the
|
Notice that the <<memory-device-bitmask-list,list of all allowed memory
|
||||||
<<memory-device-bitmask-list,list of all allowed memory property flag combinations>>
|
property flag combinations>> is written in the required order.
|
||||||
is written in the required order.
|
But if instead ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT was before
|
||||||
But if instead
|
|
||||||
ename:VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT was before
|
|
||||||
ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
||||||
ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
ename:VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, the list would still be in the
|
||||||
the list would still be in the required order.
|
required order.
|
||||||
====
|
====
|
||||||
|
|
||||||
This ordering requirement enables applications to use a simple search loop
|
This ordering requirement enables applications to use a simple search loop
|
||||||
|
@ -805,12 +803,14 @@ the error ename:VK_ERROR_OUT_OF_DEVICE_MEMORY must: be returned.
|
||||||
|
|
||||||
.Valid Usage
|
.Valid Usage
|
||||||
****
|
****
|
||||||
* pname:pAllocateInfo\->pname:allocationSize must: be less than or equal
|
* [[VUID-vkAllocateMemory-pAllocateInfo-01713]]
|
||||||
|
pname:pAllocateInfo\->pname:allocationSize must: be less than or equal
|
||||||
to
|
to
|
||||||
slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeaps[pname:pAllocateInfo\->pname:memoryTypeIndex].pname:size
|
slink:VkPhysicalDeviceMemoryProperties::pname:memoryHeaps[pname:pAllocateInfo\->pname:memoryTypeIndex].pname:size
|
||||||
as returned by flink:vkGetPhysicalDeviceMemoryProperties for the
|
as returned by flink:vkGetPhysicalDeviceMemoryProperties for the
|
||||||
slink:VkPhysicalDevice that pname:device was created from.
|
slink:VkPhysicalDevice that pname:device was created from.
|
||||||
* pname:pAllocateInfo\->pname:memoryTypeIndex must: be less than
|
* [[VUID-vkAllocateMemory-pAllocateInfo-01714]]
|
||||||
|
pname:pAllocateInfo\->pname:memoryTypeIndex must: be less than
|
||||||
slink:VkPhysicalDeviceMemoryProperties::pname:memoryTypeCount as
|
slink:VkPhysicalDeviceMemoryProperties::pname:memoryTypeCount as
|
||||||
returned by flink:vkGetPhysicalDeviceMemoryProperties for the
|
returned by flink:vkGetPhysicalDeviceMemoryProperties for the
|
||||||
slink:VkPhysicalDevice that pname:device was created from.
|
slink:VkPhysicalDevice that pname:device was created from.
|
||||||
|
@ -1631,8 +1631,8 @@ include::../api/protos/vkFreeMemory.txt[]
|
||||||
<<memory-allocation, Memory Allocation>> chapter.
|
<<memory-allocation, Memory Allocation>> chapter.
|
||||||
|
|
||||||
Before freeing a memory object, an application must: ensure the memory
|
Before freeing a memory object, an application must: ensure the memory
|
||||||
object is no longer in use by the device--for example by command buffers
|
object is no longer in use by the device--for example by command buffers in
|
||||||
in the _pending state_.
|
the _pending state_.
|
||||||
The memory can: remain bound to images or buffers at the time the memory
|
The memory can: remain bound to images or buffers at the time the memory
|
||||||
object is freed, but any further use of them (on host or device) for
|
object is freed, but any further use of them (on host or device) for
|
||||||
anything other than destroying those objects will result in undefined
|
anything other than destroying those objects will result in undefined
|
||||||
|
|
|
@ -772,12 +772,13 @@ endif::VK_KHR_maintenance2[]
|
||||||
that is used by the pipeline must: be less than or equal to
|
that is used by the pipeline must: be less than or equal to
|
||||||
sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
|
sname:VkPhysicalDeviceLimits::pname:maxPerStageResources
|
||||||
ifdef::VK_NV_clip_space_w_scaling[]
|
ifdef::VK_NV_clip_space_w_scaling[]
|
||||||
* If no element of the pname:pDynamicStates member of pname:pDynamicState
|
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715]]
|
||||||
|
If no element of the pname:pDynamicStates member of pname:pDynamicState
|
||||||
is ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, and the
|
is ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, and the
|
||||||
pname:viewportWScalingEnable member of a
|
pname:viewportWScalingEnable member of a
|
||||||
slink:VkPipelineViewportWScalingStateCreateInfoNV structure, chained to
|
slink:VkPipelineViewportWScalingStateCreateInfoNV structure, chained to
|
||||||
the pname:pNext chain of pname:pViewportState, is ename:VK_TRUE,
|
the pname:pNext chain of pname:pViewportState, is ename:VK_TRUE, the
|
||||||
the pname:pViewportWScalings member of the
|
pname:pViewportWScalings member of the
|
||||||
slink:VkPipelineViewportWScalingStateCreateInfoNV must: be a pointer to
|
slink:VkPipelineViewportWScalingStateCreateInfoNV must: be a pointer to
|
||||||
an array of
|
an array of
|
||||||
slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
|
slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
|
||||||
|
|
|
@ -1458,16 +1458,20 @@ ifdef::VK_KHX_multiview[]
|
||||||
used.
|
used.
|
||||||
endif::VK_KHX_multiview[]
|
endif::VK_KHX_multiview[]
|
||||||
|
|
||||||
Image subresources used as attachments must: not be accessed in any other
|
Applications must: ensure that all accesses to memory that backs image
|
||||||
way for the duration of a render pass instance.
|
subresources used as attachments in a given renderpass instance either
|
||||||
|
happen-before the <<renderpass-load-store-ops, load operations>> for those
|
||||||
|
attachments, or happen-after the <<renderpass-load-store-ops, store
|
||||||
|
operations>> for those attachments.
|
||||||
|
|
||||||
ifdef::VK_KHR_maintenance2[]
|
ifdef::VK_KHR_maintenance2[]
|
||||||
For depth/stencil attachments, they can: be used as both attachments and
|
For depth/stencil attachments, each aspect can: be used separately as
|
||||||
non-attachments as long as the layout of the image subresource is
|
attachments and non-attachments as long as the non-attachment accesses are
|
||||||
ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR and the
|
also via an image subresource in either the
|
||||||
non-attachment usage only accesses the depth aspect, or the layout of the
|
ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR layout
|
||||||
image subresource is
|
or the ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR
|
||||||
ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR and the
|
layout, and the attachment resource uses whichever of those two layouts the
|
||||||
non-attachment usage only accesses the stencil aspect.
|
image accesses do not.
|
||||||
Use of non-attachment aspects in this case is only well defined if the
|
Use of non-attachment aspects in this case is only well defined if the
|
||||||
attachment is used in the subpass where the non-attachment access is being
|
attachment is used in the subpass where the non-attachment access is being
|
||||||
made, or the layout of the image subresource is constant throughout the
|
made, or the layout of the image subresource is constant throughout the
|
||||||
|
|
|
@ -1343,10 +1343,12 @@ image.
|
||||||
* [[VUID-vkGetImageSubresourceLayout-aspectMask-00997]]
|
* [[VUID-vkGetImageSubresourceLayout-aspectMask-00997]]
|
||||||
The pname:aspectMask member of pname:pSubresource must: only have a
|
The pname:aspectMask member of pname:pSubresource must: only have a
|
||||||
single bit set
|
single bit set
|
||||||
* The pname:mipLevel member of pname:pSubresource must: be less than the
|
* [[VUID-vkGetImageSubresourceLayout-mipLevel-01716]]
|
||||||
|
The pname:mipLevel member of pname:pSubresource must: be less than the
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* The pname:arrayLayer member of pname:pSubresource must: be less than the
|
* [[VUID-vkGetImageSubresourceLayout-arrayLayer-01717]]
|
||||||
|
The pname:arrayLayer member of pname:pSubresource must: be less than the
|
||||||
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
ifdef::VK_KHR_sampler_ycbcr_conversion[]
|
ifdef::VK_KHR_sampler_ycbcr_conversion[]
|
||||||
|
@ -2142,18 +2144,19 @@ endif::VK_KHR_maintenance1[]
|
||||||
pname:subresourceRange.baseMipLevel must: be less than the
|
pname:subresourceRange.baseMipLevel must: be less than the
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* If pname:subresourceRange.levelCount is not
|
* [[VUID-VkImageViewCreateInfo-subresourceRange-01718]]
|
||||||
ename:VK_REMAINING_MIP_LEVELS,
|
If pname:subresourceRange.levelCount is not
|
||||||
[eq]#pname:subresourceRange.baseMipLevel {plus}
|
ename:VK_REMAINING_MIP_LEVELS, [eq]#pname:subresourceRange.baseMipLevel
|
||||||
pname:subresourceRange.levelCount# must: be less than or equal to the
|
{plus} pname:subresourceRange.levelCount# must: be less than or equal to
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
the pname:mipLevels specified in slink:VkImageCreateInfo when
|
||||||
was created
|
pname:image was created
|
||||||
ifndef::VK_KHR_maintenance1[]
|
ifndef::VK_KHR_maintenance1[]
|
||||||
* [[VUID-VkImageViewCreateInfo-subresourceRange-01480]]
|
* [[VUID-VkImageViewCreateInfo-subresourceRange-01480]]
|
||||||
pname:subresourceRange.baseArrayLayer must: be less than the
|
pname:subresourceRange.baseArrayLayer must: be less than the
|
||||||
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* If pname:subresourceRange.layerCount is not
|
* [[VUID-VkImageViewCreateInfo-subresourceRange-01719]]
|
||||||
|
If pname:subresourceRange.layerCount is not
|
||||||
ename:VK_REMAINING_ARRAY_LAYERS,
|
ename:VK_REMAINING_ARRAY_LAYERS,
|
||||||
[eq]#pname:subresourceRange.baseArrayLayer {plus}
|
[eq]#pname:subresourceRange.baseArrayLayer {plus}
|
||||||
pname:subresourceRange.layerCount# must: be less than or equal to the
|
pname:subresourceRange.layerCount# must: be less than or equal to the
|
||||||
|
@ -2417,10 +2420,12 @@ endif::VK_KHR_sampler_ycbcr_conversion[]
|
||||||
|
|
||||||
.Valid Usage
|
.Valid Usage
|
||||||
****
|
****
|
||||||
* If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS, it must:
|
* [[VUID-VkImageSubresourceRange-levelCount-01720]]
|
||||||
be greater than `0`
|
If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS, it must: be
|
||||||
* If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, it must:
|
greater than `0`
|
||||||
be greater than `0`
|
* [[VUID-VkImageSubresourceRange-layerCount-01721]]
|
||||||
|
If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS, it must: be
|
||||||
|
greater than `0`
|
||||||
* [[VUID-VkImageSubresourceRange-aspectMask-01670]]
|
* [[VUID-VkImageSubresourceRange-aspectMask-01670]]
|
||||||
If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, then it
|
If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, then it
|
||||||
must: not include any of ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
|
must: not include any of ename:VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
|
||||||
|
|
|
@ -68,7 +68,10 @@ include::../api/structs/VkSamplerCreateInfo.txt[]
|
||||||
enable anisotropic filtering, as described in the
|
enable anisotropic filtering, as described in the
|
||||||
<<textures-texel-anisotropic-filtering, Texel Anisotropic Filtering>>
|
<<textures-texel-anisotropic-filtering, Texel Anisotropic Filtering>>
|
||||||
section, or ename:VK_FALSE otherwise.
|
section, or ename:VK_FALSE otherwise.
|
||||||
* pname:maxAnisotropy is the anisotropy value clamp.
|
* pname:maxAnisotropy is the anisotropy value clamp used by the sampler
|
||||||
|
when pname:anisotropyEnable is ename:VK_TRUE.
|
||||||
|
If pname:anisotropyEnable is ename:VK_FALSE, pname:maxAnisotropy is
|
||||||
|
ignored.
|
||||||
* pname:compareEnable is ename:VK_TRUE to enable comparison against a
|
* pname:compareEnable is ename:VK_TRUE to enable comparison against a
|
||||||
reference value during lookups, or ename:VK_FALSE otherwise.
|
reference value during lookups, or ename:VK_FALSE otherwise.
|
||||||
** Note: Some implementations will default to shader state if this member
|
** Note: Some implementations will default to shader state if this member
|
||||||
|
|
|
@ -131,7 +131,7 @@ ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT bits can: be thought of as a
|
||||||
linear region of address space.
|
linear region of address space.
|
||||||
In the sname:VkImage case if ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is
|
In the sname:VkImage case if ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT is
|
||||||
not used, this linear region is entirely opaque, meaning that there is no
|
not used, this linear region is entirely opaque, meaning that there is no
|
||||||
application-visible mapping between pixel location and memory offset.
|
application-visible mapping between texel location and memory offset.
|
||||||
|
|
||||||
Unless ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
|
Unless ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
|
||||||
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT are also used, the entire
|
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT are also used, the entire
|
||||||
|
@ -180,7 +180,7 @@ Applications can: use these types of images to control LOD based on total
|
||||||
memory consumption.
|
memory consumption.
|
||||||
If memory pressure becomes an issue the application can: unbind and disable
|
If memory pressure becomes an issue the application can: unbind and disable
|
||||||
specific mipmap levels of images without having to recreate resources or
|
specific mipmap levels of images without having to recreate resources or
|
||||||
modify pixel data of unaffected levels.
|
modify texel data of unaffected levels.
|
||||||
|
|
||||||
The application can: also use this functionality to access subregions of the
|
The application can: also use this functionality to access subregions of the
|
||||||
image in a "`megatexture`" fashion.
|
image in a "`megatexture`" fashion.
|
||||||
|
@ -282,7 +282,7 @@ image::images/sparseimage.svg[align="center", title="Sparse Image"]
|
||||||
|
|
||||||
In the absence of ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
|
In the absence of ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
|
||||||
ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, each array layer contains a
|
ename:VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, each array layer contains a
|
||||||
mip tail region containing pixel data for all mip levels smaller than the
|
mip tail region containing texel data for all mip levels smaller than the
|
||||||
sparse image block in any dimension.
|
sparse image block in any dimension.
|
||||||
|
|
||||||
Mip levels that are as large or larger than a sparse image block in all
|
Mip levels that are as large or larger than a sparse image block in all
|
||||||
|
@ -305,7 +305,8 @@ image::images/sparseimage_alignedmipsize.svg[align="center", title="Sparse Image
|
||||||
The mip tail regions are presented here in 2D arrays simply for figure size
|
The mip tail regions are presented here in 2D arrays simply for figure size
|
||||||
reasons.
|
reasons.
|
||||||
Each mip tail is logically a single array of sparse blocks with an
|
Each mip tail is logically a single array of sparse blocks with an
|
||||||
implementation-dependent mapping of pixels to sparse blocks.
|
implementation-dependent mapping of texels or compressed texel blocks to
|
||||||
|
sparse blocks.
|
||||||
====
|
====
|
||||||
|
|
||||||
When ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT is present the first
|
When ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT is present the first
|
||||||
|
@ -324,7 +325,8 @@ image::images/sparseimage_alignedmipsize_singlemiptail.svg[align="center", title
|
||||||
The mip tail region is presented here in a 2D array simply for figure size
|
The mip tail region is presented here in a 2D array simply for figure size
|
||||||
reasons.
|
reasons.
|
||||||
It is logically a single array of sparse blocks with an
|
It is logically a single array of sparse blocks with an
|
||||||
implementation-dependent mapping of pixels to sparse blocks.
|
implementation-dependent mapping of texels or compressed texel blocks to
|
||||||
|
sparse blocks.
|
||||||
====
|
====
|
||||||
|
|
||||||
When both ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
|
When both ename:VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT and
|
||||||
|
@ -337,13 +339,14 @@ from each of these flags are in effect.
|
||||||
|
|
||||||
Standard sparse image block shapes define a standard set of dimensions for
|
Standard sparse image block shapes define a standard set of dimensions for
|
||||||
sparse image blocks that depend on the format of the image.
|
sparse image blocks that depend on the format of the image.
|
||||||
Layout of pixels within a sparse image block is implementation dependent.
|
Layout of texels or compressed texel blocks within a sparse image block is
|
||||||
|
implementation dependent.
|
||||||
All currently defined standard sparse image block shapes are 64 KB in size.
|
All currently defined standard sparse image block shapes are 64 KB in size.
|
||||||
|
|
||||||
For block-compressed formats (e.g. ename:VK_FORMAT_BC5_UNORM_BLOCK), the
|
For block-compressed formats (e.g. ename:VK_FORMAT_BC5_UNORM_BLOCK), the
|
||||||
pixel size is the size of the compressed texel block (128-bit for etext:BC5)
|
texel size is the size of the compressed texel block (e.g. 128-bit for
|
||||||
thus the dimensions of the standard sparse image block shapes apply in terms
|
etext:BC5) thus the dimensions of the standard sparse image block shapes
|
||||||
of compressed texel blocks.
|
apply in terms of compressed texel blocks.
|
||||||
|
|
||||||
[NOTE]
|
[NOTE]
|
||||||
.Note
|
.Note
|
||||||
|
@ -359,7 +362,7 @@ dimensions by the compressed texel block dimensions.
|
||||||
.Standard Sparse Image Block Shapes (Single Sample)
|
.Standard Sparse Image Block Shapes (Single Sample)
|
||||||
[options="header"]
|
[options="header"]
|
||||||
|====
|
|====
|
||||||
| PIXEL SIZE (bits) | Block Shape (2D) | Block Shape (3D)
|
| TEXEL SIZE (bits) | Block Shape (2D) | Block Shape (3D)
|
||||||
| *8-Bit* | 256 {times} 256 {times} 1 | 64 {times} 32 {times} 32
|
| *8-Bit* | 256 {times} 256 {times} 1 | 64 {times} 32 {times} 32
|
||||||
| *16-Bit* | 256 {times} 128 {times} 1 | 32 {times} 32 {times} 32
|
| *16-Bit* | 256 {times} 128 {times} 1 | 32 {times} 32 {times} 32
|
||||||
| *32-Bit* | 128 {times} 128 {times} 1 | 32 {times} 32 {times} 16
|
| *32-Bit* | 128 {times} 128 {times} 1 | 32 {times} 32 {times} 16
|
||||||
|
@ -371,7 +374,7 @@ dimensions by the compressed texel block dimensions.
|
||||||
.Standard Sparse Image Block Shapes (MSAA)
|
.Standard Sparse Image Block Shapes (MSAA)
|
||||||
[options="header"]
|
[options="header"]
|
||||||
|====
|
|====
|
||||||
| PIXEL SIZE (bits)| Block Shape (2X) | Block Shape (4X) | Block Shape (8X) | Block Shape (16X)
|
| TEXEL SIZE (bits)| Block Shape (2X) | Block Shape (4X) | Block Shape (8X) | Block Shape (16X)
|
||||||
| *8-Bit* | 128 {times} 256 {times} 1 | 128 {times} 128 {times} 1 | 64 {times} 128 {times} 1 | 64 {times} 64 {times} 1
|
| *8-Bit* | 128 {times} 256 {times} 1 | 128 {times} 128 {times} 1 | 64 {times} 128 {times} 1 | 64 {times} 64 {times} 1
|
||||||
| *16-Bit* | 128 {times} 128 {times} 1 | 128 {times} 64 {times} 1 | 64 {times} 64 {times} 1 | 64 {times} 32 {times} 1
|
| *16-Bit* | 128 {times} 128 {times} 1 | 128 {times} 64 {times} 1 | 64 {times} 64 {times} 1 | 64 {times} 32 {times} 1
|
||||||
| *32-Bit* | 64 {times} 128 {times} 1 | 64 {times} 64 {times} 1 | 32 {times} 64 {times} 1 | 32 {times} 32 {times} 1
|
| *32-Bit* | 64 {times} 128 {times} 1 | 64 {times} 64 {times} 1 | 32 {times} 64 {times} 1 | 32 {times} 32 {times} 1
|
||||||
|
@ -436,14 +439,15 @@ image::images/sparseimage_multiaspect.svg[align="center",title="Multiple Aspect
|
||||||
The mip tail regions are presented here in 2D arrays simply for figure size
|
The mip tail regions are presented here in 2D arrays simply for figure size
|
||||||
reasons.
|
reasons.
|
||||||
Each mip tail is logically a single array of sparse blocks with an
|
Each mip tail is logically a single array of sparse blocks with an
|
||||||
implementation-dependent mapping of pixels to sparse blocks.
|
implementation-dependent mapping of texels or compressed texel blocks to
|
||||||
|
sparse blocks.
|
||||||
====
|
====
|
||||||
|
|
||||||
In the figure above the depth, stencil, and metadata aspects all have unique
|
In the figure above the depth, stencil, and metadata aspects all have unique
|
||||||
sparse properties.
|
sparse properties.
|
||||||
The per-pixel stencil data is [eq]#{onequarter}# the size of the depth data,
|
The per-texel stencil data is [eq]#{onequarter}# the size of the depth data,
|
||||||
hence the stencil sparse blocks include [eq]#4 {times}# the number of
|
hence the stencil sparse blocks include [eq]#4 {times}# the number of
|
||||||
pixels.
|
texels.
|
||||||
The sparse block size in bytes for all of the aspects is identical and
|
The sparse block size in bytes for all of the aspects is identical and
|
||||||
defined by sname:VkMemoryRequirements::pname:alignment.
|
defined by sname:VkMemoryRequirements::pname:alignment.
|
||||||
|
|
||||||
|
@ -610,7 +614,7 @@ If the application always uses sname:VkSparseImageMemoryBindInfo to bind
|
||||||
memory for the non-tail mip levels, any holes that are present in the
|
memory for the non-tail mip levels, any holes that are present in the
|
||||||
resource size may: never be bound.
|
resource size may: never be bound.
|
||||||
|
|
||||||
Since sname:VkSparseImageMemoryBindInfo uses pixel locations to determine
|
Since sname:VkSparseImageMemoryBindInfo uses texel locations to determine
|
||||||
which device virtual addresses to bind, it is impossible to bind device
|
which device virtual addresses to bind, it is impossible to bind device
|
||||||
virtual address holes with this operation.
|
virtual address holes with this operation.
|
||||||
====
|
====
|
||||||
|
@ -808,7 +812,7 @@ include::../api/enums/VkSparseImageFormatFlagBits.txt[]
|
||||||
* ename:VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT specifies that
|
* ename:VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT specifies that
|
||||||
the image uses non-standard sparse image block dimensions, and the
|
the image uses non-standard sparse image block dimensions, and the
|
||||||
pname:imageGranularity values do not match the standard sparse image
|
pname:imageGranularity values do not match the standard sparse image
|
||||||
block dimensions for the given pixel format.
|
block dimensions for the given format.
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
||||||
|
@ -829,7 +833,7 @@ include::../api/protos/vkGetPhysicalDeviceSparseImageFormatProperties.txt[]
|
||||||
sparse image capabilities.
|
sparse image capabilities.
|
||||||
* pname:format is the image format.
|
* pname:format is the image format.
|
||||||
* pname:type is the dimensionality of image.
|
* pname:type is the dimensionality of image.
|
||||||
* pname:samples is the number of samples per pixel as defined in
|
* pname:samples is the number of samples per texel as defined in
|
||||||
elink:VkSampleCountFlagBits.
|
elink:VkSampleCountFlagBits.
|
||||||
* pname:usage is a bitmask describing the intended usage of the image.
|
* pname:usage is a bitmask describing the intended usage of the image.
|
||||||
* pname:tiling is the tiling arrangement of the data elements in memory.
|
* pname:tiling is the tiling arrangement of the data elements in memory.
|
||||||
|
@ -919,7 +923,7 @@ include::../api/structs/VkPhysicalDeviceSparseImageFormatInfo2KHR.txt[]
|
||||||
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
|
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
|
||||||
* pname:format is the image format.
|
* pname:format is the image format.
|
||||||
* pname:type is the dimensionality of image.
|
* pname:type is the dimensionality of image.
|
||||||
* pname:samples is the number of samples per pixel as defined in
|
* pname:samples is the number of samples per texel as defined in
|
||||||
elink:VkSampleCountFlagBits.
|
elink:VkSampleCountFlagBits.
|
||||||
* pname:usage is a bitmask describing the intended usage of the image.
|
* pname:usage is a bitmask describing the intended usage of the image.
|
||||||
* pname:tiling is the tiling arrangement of the data elements in memory.
|
* pname:tiling is the tiling arrangement of the data elements in memory.
|
||||||
|
@ -1038,9 +1042,9 @@ include::../api/structs/VkSparseImageMemoryRequirements.txt[]
|
||||||
ename:VK_IMAGE_ASPECT_DEPTH_BIT and ename:VK_IMAGE_ASPECT_STENCIL_BIT
|
ename:VK_IMAGE_ASPECT_DEPTH_BIT and ename:VK_IMAGE_ASPECT_STENCIL_BIT
|
||||||
would be present.
|
would be present.
|
||||||
* pname:formatProperties.imageGranularity describes the dimensions of a
|
* pname:formatProperties.imageGranularity describes the dimensions of a
|
||||||
single bindable sparse image block in pixel units.
|
single bindable sparse image block in texel units.
|
||||||
For aspect ename:VK_IMAGE_ASPECT_METADATA_BIT, all dimensions will be
|
For aspect ename:VK_IMAGE_ASPECT_METADATA_BIT, all dimensions will be
|
||||||
zero pixels.
|
zero.
|
||||||
All metadata is located in the mip tail region.
|
All metadata is located in the mip tail region.
|
||||||
* pname:formatProperties.flags is a bitmask of
|
* pname:formatProperties.flags is a bitmask of
|
||||||
elink:VkSparseImageFormatFlagBits:
|
elink:VkSparseImageFormatFlagBits:
|
||||||
|
@ -1054,7 +1058,7 @@ include::../api/structs/VkSparseImageMemoryRequirements.txt[]
|
||||||
image uses non-standard sparse image block dimensions.
|
image uses non-standard sparse image block dimensions.
|
||||||
The pname:formatProperties.imageGranularity values do not match the
|
The pname:formatProperties.imageGranularity values do not match the
|
||||||
standard sparse image block dimension corresponding to the image's
|
standard sparse image block dimension corresponding to the image's
|
||||||
pixel format.
|
format.
|
||||||
* pname:imageMipTailFirstLod is the first mip level at which image
|
* pname:imageMipTailFirstLod is the first mip level at which image
|
||||||
subresources are included in the mip tail region.
|
subresources are included in the mip tail region.
|
||||||
* pname:imageMipTailSize is the memory size (in bytes) of the mip tail
|
* pname:imageMipTailSize is the memory size (in bytes) of the mip tail
|
||||||
|
@ -1392,10 +1396,12 @@ include::../api/structs/VkSparseImageMemoryBindInfo.txt[]
|
||||||
|
|
||||||
.Valid Usage
|
.Valid Usage
|
||||||
****
|
****
|
||||||
* The pname:subresource.mipLevel member of each element of pname:pBinds
|
* [[VUID-VkSparseImageMemoryBindInfo-subresource-01722]]
|
||||||
|
The pname:subresource.mipLevel member of each element of pname:pBinds
|
||||||
must: be less than the pname:mipLevels specified in
|
must: be less than the pname:mipLevels specified in
|
||||||
slink:VkImageCreateInfo when pname:image was created
|
slink:VkImageCreateInfo when pname:image was created
|
||||||
* The pname:subresource.arrayLayer member of each element of pname:pBinds
|
* [[VUID-VkSparseImageMemoryBindInfo-subresource-01723]]
|
||||||
|
The pname:subresource.arrayLayer member of each element of pname:pBinds
|
||||||
must: be less than the pname:arrayLayers specified in
|
must: be less than the pname:arrayLayers specified in
|
||||||
slink:VkImageCreateInfo when pname:image was created
|
slink:VkImageCreateInfo when pname:image was created
|
||||||
****
|
****
|
||||||
|
|
|
@ -3788,17 +3788,18 @@ endif::VK_KHR_external_memory[]
|
||||||
pname:subresourceRange.baseMipLevel must: be less than the
|
pname:subresourceRange.baseMipLevel must: be less than the
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* If pname:subresourceRange.levelCount is not
|
* [[VUID-VkImageMemoryBarrier-subresourceRange-01724]]
|
||||||
ename:VK_REMAINING_MIP_LEVELS,
|
If pname:subresourceRange.levelCount is not
|
||||||
[eq]#pname:subresourceRange.baseMipLevel {plus}
|
ename:VK_REMAINING_MIP_LEVELS, [eq]#pname:subresourceRange.baseMipLevel
|
||||||
pname:subresourceRange.levelCount# must: be less than or equal to the
|
{plus} pname:subresourceRange.levelCount# must: be less than or equal to
|
||||||
pname:mipLevels specified in slink:VkImageCreateInfo when pname:image
|
the pname:mipLevels specified in slink:VkImageCreateInfo when
|
||||||
was created
|
pname:image was created
|
||||||
* [[VUID-VkImageMemoryBarrier-subresourceRange-01488]]
|
* [[VUID-VkImageMemoryBarrier-subresourceRange-01488]]
|
||||||
pname:subresourceRange.baseArrayLayer must: be less than the
|
pname:subresourceRange.baseArrayLayer must: be less than the
|
||||||
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
pname:arrayLayers specified in slink:VkImageCreateInfo when pname:image
|
||||||
was created
|
was created
|
||||||
* If pname:subresourceRange.layerCount is not
|
* [[VUID-VkImageMemoryBarrier-subresourceRange-01725]]
|
||||||
|
If pname:subresourceRange.layerCount is not
|
||||||
ename:VK_REMAINING_ARRAY_LAYERS,
|
ename:VK_REMAINING_ARRAY_LAYERS,
|
||||||
[eq]#pname:subresourceRange.baseArrayLayer {plus}
|
[eq]#pname:subresourceRange.baseArrayLayer {plus}
|
||||||
pname:subresourceRange.layerCount# must: be less than or equal to the
|
pname:subresourceRange.layerCount# must: be less than or equal to the
|
||||||
|
|
|
@ -1922,6 +1922,41 @@ offsets [eq]#({DeltaUpper}~i~, {DeltaUpper}~j~, {DeltaUpper}~k~)# are added
|
||||||
to [eq]#(i,j,k)# components of the integer texel coordinates.
|
to [eq]#(i,j,k)# components of the integer texel coordinates.
|
||||||
|
|
||||||
|
|
||||||
|
[[textures-integer-coordinate-operations]]
|
||||||
|
== Integer Texel Coordinate Operations
|
||||||
|
|
||||||
|
ifdef::VK_AMD_shader_image_load_store_lod[]
|
||||||
|
Integer texel coordinate operations may: supply a LOD which texels are to be
|
||||||
|
read from or written to using the optional SPIR-V operand code:Lod.
|
||||||
|
endif::VK_AMD_shader_image_load_store_lod[]
|
||||||
|
ifndef::VK_AMD_shader_image_load_store_lod[]
|
||||||
|
The code:OpImageFetch and code:OpImageFetchSparse SPIR-V instructions may:
|
||||||
|
supply a LOD from which texels are to be fetched using the optional SPIR-V
|
||||||
|
operand code:Lod.
|
||||||
|
Other integer-coordinate operations must: not.
|
||||||
|
endif::VK_AMD_shader_image_load_store_lod[]
|
||||||
|
If the code:Lod is provided then it must: be an integer.
|
||||||
|
|
||||||
|
The image level selected is:
|
||||||
|
[latexmath]
|
||||||
|
++++++++++++++++++++++++
|
||||||
|
\begin{aligned}
|
||||||
|
d & = level_{base} +
|
||||||
|
\begin{cases}
|
||||||
|
Lod & \text{(from optional SPIR-V operand)} \\
|
||||||
|
0 & \text{otherwise}
|
||||||
|
\end{cases} \\
|
||||||
|
\end{aligned}
|
||||||
|
++++++++++++++++++++++++
|
||||||
|
|
||||||
|
If [eq]#d# does not lie in the range [eq]#[pname:baseMipLevel,
|
||||||
|
pname:baseMipLevel {plus} pname:levelCount)# then any values fetched are
|
||||||
|
ifndef::VK_AMD_shader_image_load_store_lod[undefined.]
|
||||||
|
ifdef::VK_AMD_shader_image_load_store_lod[]
|
||||||
|
undefined, and any writes are discarded.
|
||||||
|
endif::VK_AMD_shader_image_load_store_lod[]
|
||||||
|
|
||||||
|
|
||||||
[[textures-sample-operations]]
|
[[textures-sample-operations]]
|
||||||
== Image Sample Operations
|
== Image Sample Operations
|
||||||
|
|
||||||
|
|
|
@ -495,7 +495,8 @@ include::../api/structs/VkPipelineViewportStateCreateInfo.txt[]
|
||||||
* [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01220]]
|
* [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01220]]
|
||||||
pname:scissorCount and pname:viewportCount must: be identical
|
pname:scissorCount and pname:viewportCount must: be identical
|
||||||
ifdef::VK_NV_clip_space_w_scaling[]
|
ifdef::VK_NV_clip_space_w_scaling[]
|
||||||
* If the pname:viewportWScalingEnable member of a
|
* [[VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726]]
|
||||||
|
If the pname:viewportWScalingEnable member of a
|
||||||
slink:VkPipelineViewportWScalingStateCreateInfoNV structure chained to
|
slink:VkPipelineViewportWScalingStateCreateInfoNV structure chained to
|
||||||
the pname:pNext chain is ename:VK_TRUE, the pname:viewportCount member
|
the pname:pNext chain is ename:VK_TRUE, the pname:viewportCount member
|
||||||
of the slink:VkPipelineViewportWScalingStateCreateInfoNV structure must:
|
of the slink:VkPipelineViewportWScalingStateCreateInfoNV structure must:
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
# The value to start tagging VU statements at, unless overridden by -nextvu
|
# The value to start tagging VU statements at, unless overridden by -nextvu
|
||||||
startVUID = 1690
|
startVUID = 1727
|
||||||
|
|
|
@ -715,7 +715,8 @@ endif::editing-notes[]
|
||||||
[source,asciidoc,subs=attributes+]
|
[source,asciidoc,subs=attributes+]
|
||||||
----
|
----
|
||||||
* pname:flags is a bitmask indicating usage behavior for the pool and
|
* pname:flags is a bitmask indicating usage behavior for the pool and
|
||||||
command buffers allocated from it. Bits which can: be set include:
|
command buffers allocated from it.
|
||||||
|
Bits which can: be set include:
|
||||||
+
|
+
|
||||||
{blank}--
|
{blank}--
|
||||||
// refBegin VkCommandPoolCreateFlagBits - Bitmask specifying usage behavior for a command pool
|
// refBegin VkCommandPoolCreateFlagBits - Bitmask specifying usage behavior for a command pool
|
||||||
|
@ -790,6 +791,11 @@ statements are not self-contained.
|
||||||
This would make it impossible to extract semantically meaningful
|
This would make it impossible to extract semantically meaningful
|
||||||
descriptions for each assigned <<appendix-vuid, Valid Usage ID Tag>>.
|
descriptions for each assigned <<appendix-vuid, Valid Usage ID Tag>>.
|
||||||
|
|
||||||
|
Be clear on the distinction between a "`valid pointer`" and a "`pointer to a
|
||||||
|
valid object`" when writing Valid Usage statements.
|
||||||
|
See the "`Valid Usage`" section of the Vulkan Specification, and
|
||||||
|
particularly the "`Valid Usage for Pointers`" section.
|
||||||
|
|
||||||
Explicit Valid Usage statements must be assigned Valid Usage ID tags before
|
Explicit Valid Usage statements must be assigned Valid Usage ID tags before
|
||||||
publication.
|
publication.
|
||||||
This process is described in the <<appendix-vuid, Valid Usage ID Tags>>
|
This process is described in the <<appendix-vuid, Valid Usage ID Tags>>
|
||||||
|
@ -874,17 +880,20 @@ Attributes which can be set on the block are:
|
||||||
(command, structure, enumerant, handle, etc.) name. This attribute is
|
(command, structure, enumerant, handle, etc.) name. This attribute is
|
||||||
required.
|
required.
|
||||||
* *desc* - short description / summary of the page, used in the page
|
* *desc* - short description / summary of the page, used in the page
|
||||||
title. This attribute is required.
|
title.
|
||||||
|
This attribute is required.
|
||||||
* *type* - type of the interface, which must match the directory name
|
* *type* - type of the interface, which must match the directory name
|
||||||
following `api/` in the interface `include::` line within the block, and
|
following `api/` in the interface `include::` line within the block, and
|
||||||
must be one of `basetypes`, `defines`, `enums`, `flags`, `funcpointers`,
|
must be one of `basetypes`, `defines`, `enums`, `flags`, `funcpointers`,
|
||||||
`handles`, `protos`, or `structs`. This attribute is required.
|
`handles`, `protos`, or `structs`.
|
||||||
|
This attribute is required.
|
||||||
* *xrefs* - list of whitespace-separated names of other reference pages
|
* *xrefs* - list of whitespace-separated names of other reference pages
|
||||||
which should be added to the `See Also` section of this page. Most
|
which should be added to the `See Also` section of this page.
|
||||||
cross-references are automatically generated based on the immediate
|
Most cross-references are automatically generated based on the immediate
|
||||||
dependency information in `vk.xml`, but in some cases, such as referring
|
dependency information in `vk.xml`, but in some cases, such as referring
|
||||||
between `*FlagBits` and `*Flags` types, this additional tagging is
|
between `*FlagBits` and `*Flags` types, this additional tagging is
|
||||||
useful. This attribute is optional.
|
useful.
|
||||||
|
This attribute is optional.
|
||||||
|
|
||||||
Attributes of the open block must be written in this format, using single
|
Attributes of the open block must be written in this format, using single
|
||||||
quotes as delimiters (even though asciidoc markup also allows double
|
quotes as delimiters (even though asciidoc markup also allows double
|
||||||
|
@ -896,8 +905,8 @@ After the open block is started, the following markup should be provided:
|
||||||
* A single paragraph of text describing the definition of the interface.
|
* A single paragraph of text describing the definition of the interface.
|
||||||
This paragraph is optional, but strongly recommended.
|
This paragraph is optional, but strongly recommended.
|
||||||
* The `include` line for the interface, which must be consistent with the
|
* The `include` line for the interface, which must be consistent with the
|
||||||
page name and type in the open block attributes. This paragraph is
|
page name and type in the open block attributes.
|
||||||
required.
|
This paragraph is required.
|
||||||
* A bullet list describing function parameters, structure members,
|
* A bullet list describing function parameters, structure members,
|
||||||
enumerants in an enumerated type, etc.
|
enumerants in an enumerated type, etc.
|
||||||
This list should contain no empty lines, as the extraction script
|
This list should contain no empty lines, as the extraction script
|
||||||
|
@ -917,8 +926,9 @@ After the open block is started, the following markup should be provided:
|
||||||
// refBody
|
// refBody
|
||||||
----
|
----
|
||||||
+
|
+
|
||||||
* An explicit Valid Usage block. This block is required if the interface
|
* An explicit Valid Usage block.
|
||||||
has such Valid Usage constraints.
|
This block is required if the interface has such Valid Usage
|
||||||
|
constraints.
|
||||||
* The `include` line for the implicit valid usage block.
|
* The `include` line for the implicit valid usage block.
|
||||||
This line is required for for commands and structures, but not for
|
This line is required for for commands and structures, but not for
|
||||||
interfaces such as enumerated types, which do not have implicit valid
|
interfaces such as enumerated types, which do not have implicit valid
|
||||||
|
|
|
@ -157,6 +157,10 @@ include::style/vuid.txt[]
|
||||||
|
|
||||||
= Revision History
|
= Revision History
|
||||||
|
|
||||||
|
* 2017-10-27 - Add language about proper use of "`valid pointer`" and
|
||||||
|
"`pointer to valid object`" for valid usage statements, in the
|
||||||
|
<<sample-command, Sample Command Description>> section (related to public
|
||||||
|
pull request 547).
|
||||||
* 2017-10-15 - Describe how to write <<writing-latexmath-in-table-cells,
|
* 2017-10-15 - Describe how to write <<writing-latexmath-in-table-cells,
|
||||||
LaTeX Math in Table Cells>> (internal issue 908).
|
LaTeX Math in Table Cells>> (internal issue 908).
|
||||||
* 2017-10-15 - Add more details of <<extensions-naming-author-IDs, `KHX`
|
* 2017-10-15 - Add more details of <<extensions-naming-author-IDs, `KHX`
|
||||||
|
|
|
@ -107,7 +107,7 @@ private version is maintained in the 1.0 branch of the member gitlab server.
|
||||||
<type category="define">// Vulkan 1.0 version number
|
<type category="define">// Vulkan 1.0 version number
|
||||||
#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)// Patch version should always be set to 0</type>
|
#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)// Patch version should always be set to 0</type>
|
||||||
<type category="define">// Version of this file
|
<type category="define">// Version of this file
|
||||||
#define <name>VK_HEADER_VERSION</name> 64</type>
|
#define <name>VK_HEADER_VERSION</name> 65</type>
|
||||||
|
|
||||||
<type category="define">
|
<type category="define">
|
||||||
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
|
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
|
||||||
|
|
|
@ -43,7 +43,7 @@ extern "C" {
|
||||||
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
|
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
|
||||||
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
|
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
|
||||||
// Version of this file
|
// Version of this file
|
||||||
#define VK_HEADER_VERSION 64
|
#define VK_HEADER_VERSION 65
|
||||||
|
|
||||||
|
|
||||||
#define VK_NULL_HANDLE 0
|
#define VK_NULL_HANDLE 0
|
||||||
|
|
Loading…
Reference in New Issue