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:
Jon Leech 2017-10-28 02:15:09 -07:00
parent 392384a31b
commit 0a1c49409f
25 changed files with 270 additions and 150 deletions

View File

@ -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"`)

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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>>.

View File

@ -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.

View File

@ -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[]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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
**** ****

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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`

View File

@ -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>

View File

@ -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