Change log for October 25, 2016 Vulkan 1.0.32 spec update:
* Bump API patch number and header version number to 32 for this update. Github Issues: * Add automatic visibility operations to the presentation engineE when doing a queue present in flink:vkAcquireNextImageKHR. Removed all references to MEMORY_READ that referenced WSI - they no longer make sense (some aspects of public issues 128, 131, 132, 261, and 298). * Document valid non-boolean +externsync+ attribute values for <param> tags in +vk.xml+ (public issue 265). * Add valid usage to slink:VkImageCreateInfo requiring that pname:arrayLayers be 1 for images of type ename:VK_IMAGE_TYPE_3D (public issue 319). * Add missing captions to figures in the <<textures,Image Operations>> chapter (public issue 334). * Clarify WSI interaction with exclusive sharing mode (public issue 344). * Added explicit language clarifying the allowed queue usage of resources created with ename:VK_SHARING_MODE_CONCURRENT (public issue 386). * Require that the slink:VkDescriptorSetLayoutCreateInfo::pname:binding members of the pname:pBindings array passed to flink:vkDescriptorSetLayoutCreateInfo all be distinct (public issue 391). Internal Issues: * Remove empty validity blocks from +vk.xml+ and suppressed broken validity statements and added missing statements to explicit validity. Doesn't affect output, other than some statements appearing in another block now (internal issue 513).
This commit is contained in:
parent
b97259786d
commit
368b08a7b2
|
@ -1520,3 +1520,41 @@ Internal Issues:
|
|||
* Tag usages of ``dynamically uniform'' as glossary terms and add a
|
||||
glossary entry pointing to the SPIR-V Specification's definition of the
|
||||
term (internal issue 531).
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Change log for October 25, 2016 Vulkan 1.0.32 spec update:
|
||||
|
||||
* Bump API patch number and header version number to 32 for this update.
|
||||
|
||||
Github Issues:
|
||||
|
||||
* Add automatic visibility operations to the presentation engineE when
|
||||
doing a queue present in flink:vkAcquireNextImageKHR. Removed all
|
||||
references to MEMORY_READ that referenced WSI - they no longer make
|
||||
sense (some aspects of public issues 128, 131, 132, 261, and 298).
|
||||
* Document valid non-boolean +externsync+ attribute values for <param>
|
||||
tags in +vk.xml+ (public issue 265).
|
||||
* Add valid usage to slink:VkImageCreateInfo requiring that
|
||||
pname:arrayLayers be 1 for images of type ename:VK_IMAGE_TYPE_3D
|
||||
(public issue 319).
|
||||
* Add missing captions to figures in the <<textures,Image Operations>>
|
||||
chapter (public issue 334).
|
||||
* Clarify WSI interaction with exclusive sharing mode (public issue
|
||||
344).
|
||||
* Added explicit language clarifying the allowed queue usage of
|
||||
resources created with ename:VK_SHARING_MODE_CONCURRENT (public
|
||||
issue 386).
|
||||
* Require that the
|
||||
slink:VkDescriptorSetLayoutCreateInfo::pname:binding members of the
|
||||
pname:pBindings array passed to
|
||||
flink:vkDescriptorSetLayoutCreateInfo all be distinct (public issue
|
||||
391).
|
||||
|
||||
Internal Issues:
|
||||
|
||||
* Remove empty validity blocks from +vk.xml+ and suppressed broken
|
||||
validity statements and added missing statements to explicit
|
||||
validity. Doesn't affect output, other than some statements
|
||||
appearing in another block now (internal issue 513).
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@ GENDEPENDS = api/timeMarker validity/timeMarker hostsynctable/timeMarker
|
|||
COMMONDOCS = $(CHAPTERS) $(GENINCLUDE) $(GENDEPENDS)
|
||||
# A generated included file containing the spec version, date, and git commit
|
||||
SPECVERSION = specversion.txt
|
||||
SPECREVISION = 1.0.31
|
||||
SPECREVISION = 1.0.32
|
||||
SPECREMARK =
|
||||
|
||||
# Spec targets
|
||||
|
|
|
@ -164,14 +164,9 @@ registered.
|
|||
|
||||
.Valid Usage
|
||||
****
|
||||
* pname:instance must: be a valid sname:VkInstance handle
|
||||
* pname:flags must: be a combination of one or more of
|
||||
sname:VkDebugReportFlagBitsEXT
|
||||
* pname:objType must: be one of sname:VkDebugReportObjectTypeEXT,
|
||||
ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT if pname:object is `NULL`
|
||||
* pname:object may: be a Vulkan object
|
||||
* pname:pLayerPrefix must: be a `NULL` terminated string
|
||||
* pname:pMsg must: be a `NULL` terminated string
|
||||
* pname:pMessage must: be a `NULL` terminated string
|
||||
****
|
||||
|
||||
include::../validity/protos/vkDebugReportMessageEXT.txt[]
|
||||
|
|
|
@ -534,9 +534,6 @@ The fname:vkCmdWaitEvents or fname:vkCmdPipelineBarrier used to transition
|
|||
the image away from ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout must: have
|
||||
pname:dstStageMask and pname:dstAccessMask parameters set based on the next
|
||||
use of the image.
|
||||
The pname:srcAccessMask must: include ename:VK_ACCESS_MEMORY_READ_BIT to
|
||||
ensure that all prior reads by the presentation engine are complete before
|
||||
the image layout transition occurs.
|
||||
The application must: use
|
||||
<<synchronization-implicit-ordering-hostwrites,implicit ordering
|
||||
guarantees>> and
|
||||
|
@ -567,6 +564,19 @@ still be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout if it was
|
|||
previously presented, or in the ename:VK_IMAGE_LAYOUT_UNDEFINED layout if
|
||||
this is the first time it has been acquired.
|
||||
|
||||
[NOTE]
|
||||
.Note
|
||||
====
|
||||
Exclusive ownership of presentable images corresponding to a swapchain
|
||||
created with ename:VK_SHARING_MODE_EXCLUSIVE as defined in
|
||||
<<resources-sharing,Resource Sharing>> is not altered by a call to
|
||||
fname:vkAcquireNextImageKHR.
|
||||
That means upon the first acquisition from such a swapchain presentable
|
||||
images are not owned by any queue family, while at subsequent acquisitions
|
||||
the presentable images remain owned by the queue family the image was
|
||||
previously presented on.
|
||||
====
|
||||
|
||||
The possible return values for fname:vkAcquireNextImageKHR() depend on the
|
||||
pname:timeout provided:
|
||||
|
||||
|
@ -612,16 +622,18 @@ image sizes, a ename:VK_ERROR_OUT_OF_DATE_KHR error will be returned.
|
|||
|
||||
Before an application can: present an image, the image's layout must: be
|
||||
transitioned to the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout.
|
||||
The fname:vkCmdWaitEvents or fname:vkCmdPipelineBarrier that perform the
|
||||
transition must: have pname:srcStageMask and pname:srcAccessMask parameters
|
||||
set based on the preceding use of the image.
|
||||
The pname:dstAccessMask must: include ename:VK_ACCESS_MEMORY_READ_BIT
|
||||
indicating all prior accesses indicated in pname:srcAccessMask from stages
|
||||
in pname:srcStageMask are to be made available to reads by the presentation
|
||||
engine.
|
||||
Any value of pname:dstStageMask is valid, but should: be set to
|
||||
ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT to avoid delaying subsequent
|
||||
commands that do not access the image.
|
||||
|
||||
.Note
|
||||
[NOTE]
|
||||
====
|
||||
When transitioning the image to ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, there
|
||||
is no need to delay subsequent processing, or perform any visibility
|
||||
operations (as flink:vkQueuePresentKHR performs automatic visibility
|
||||
operations).
|
||||
To achieve this, the pname:dstAccessMask member of the
|
||||
slink:VkImageMemoryBarrier should: be set to `0`, and the pname:dstStageMask
|
||||
parameter should: be set to ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT.
|
||||
====
|
||||
|
||||
// refBegin vkQueuePresentKHR - Queue an image for presentation
|
||||
|
||||
|
@ -649,6 +661,15 @@ ifdef::VK_KHR_display_swapchain[]
|
|||
endif::VK_KHR_display_swapchain[]
|
||||
****
|
||||
|
||||
Any writes to memory backing the images referenced by the
|
||||
pname:pImageIndices and pname:pSwapchains members of pname:pPresentInfo,
|
||||
that are available before flink:VkQueuePresentKHR is executed, are
|
||||
automatically made visible to the read access performed by the presentation
|
||||
engine.
|
||||
This automatic visibility operation for an image happens-after the semaphore
|
||||
signal operation, and happens-before the presentation engine accesses the
|
||||
image.
|
||||
|
||||
include::../../validity/protos/vkQueuePresentKHR.txt[]
|
||||
|
||||
// refBegin VkPresentInfoKHR - Structure describing parameters of a queue presentation
|
||||
|
@ -701,7 +722,11 @@ endif::VK_KHR_display_swapchain[]
|
|||
|
||||
fname:vkQueuePresentKHR, releases the acquisition of the images referenced
|
||||
by pname:imageIndices.
|
||||
A presented images must: not be used again before it has been reacquired
|
||||
The queue family corresponding to the queue fname:vkQueuePresentKHR is
|
||||
executed on must: have ownership of the presented images as defined in
|
||||
<<resource-sharing,Resource Sharing>>.
|
||||
fname:vkQueuePresentKHR does not alter the queue family ownership, but the
|
||||
presented images must: not be used again before they have been reacquired
|
||||
using fname:vkAcquireNextImageKHR.
|
||||
|
||||
The processing of the presentation happens in issue order with other queue
|
||||
|
|
|
@ -208,6 +208,7 @@ described for flink:vkCreateRenderPass.
|
|||
not include ename:VK_IMAGE_ASPECT_DEPTH_BIT or
|
||||
ename:VK_IMAGE_ASPECT_STENCIL_BIT
|
||||
* pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
|
||||
* pname:clearValue must: be a valid sname:VkClearValue union
|
||||
****
|
||||
|
||||
include::../validity/structs/VkClearAttachment.txt[]
|
||||
|
@ -288,6 +289,12 @@ This union is used where part of the API requires either color or
|
|||
depth/stencil clear values, depending on the attachment, and defines the
|
||||
initial clear values in the slink:VkRenderPassBeginInfo structure.
|
||||
|
||||
.Valid Usage
|
||||
****
|
||||
* pname:depthStencil must: be a valid sname:VkClearDepthStencilValue
|
||||
structure
|
||||
****
|
||||
|
||||
include::../validity/structs/VkClearValue.txt[]
|
||||
|
||||
|
||||
|
|
|
@ -425,8 +425,8 @@ include::../api/structs/VkCommandBufferInheritanceInfo.txt[]
|
|||
compatible>> with and can: be executed within.
|
||||
If the sname:VkCommandBuffer will not be executed within a render pass
|
||||
instance, pname:renderPass is ignored.
|
||||
* pname:subpass is the index of the subpass within the render pass instance
|
||||
that the sname:VkCommandBuffer will be executed within.
|
||||
* pname:subpass is the index of the subpass within the render pass
|
||||
instance that the sname:VkCommandBuffer will be executed within.
|
||||
If the sname:VkCommandBuffer will not be executed within a render pass
|
||||
instance, pname:subpass is ignored.
|
||||
* pname:framebuffer optionally refers to the sname:VkFramebuffer object
|
||||
|
|
|
@ -157,16 +157,17 @@ pname:layerCount layers are copied to the destination image.
|
|||
|
||||
[[copies-images-format-compatibility]]
|
||||
The formats of pname:srcImage and pname:dstImage must: be compatible.
|
||||
Formats are considered compatible if their element size is the same
|
||||
between both formats.
|
||||
Formats are considered compatible if their element size is the same between
|
||||
both formats.
|
||||
For example, ename:VK_FORMAT_R8G8B8A8_UNORM is compatible with
|
||||
ename:VK_FORMAT_R32_UINT because both texels are 4 bytes in size.
|
||||
Depth/stencil formats must: match exactly.
|
||||
|
||||
fname:vkCmdCopyImage allows copying between size-compatible compressed and
|
||||
uncompressed internal formats.
|
||||
Formats are size-compatible if the element size of the uncompressed format is
|
||||
equal to the element size (compressed texel block size) of the compressed format.
|
||||
Formats are size-compatible if the element size of the uncompressed format
|
||||
is equal to the element size (compressed texel block size) of the compressed
|
||||
format.
|
||||
Such a copy does not perform on-the-fly compression or decompression.
|
||||
When copying from an uncompressed format to a compressed format, each texel
|
||||
of uncompressed data of the source image is copied as a raw value to the
|
||||
|
@ -558,8 +559,8 @@ destination image.
|
|||
** If the calling command's pname:srcImage (flink:vkCmdCopyImageToBuffer)
|
||||
or pname:dstImage (flink:vkCmdCopyBufferToImage) is of type
|
||||
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then
|
||||
pname:imageOffset.z must: be `0` and
|
||||
pname:imageExtent.depth must: be `1`.
|
||||
pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be
|
||||
`1`.
|
||||
* If the calling command's sname:VkImage parameter is a compressed format
|
||||
image:
|
||||
** pname:bufferRowLength must: be a multiple of the compressed texel block
|
||||
|
@ -910,7 +911,8 @@ the specified source and destination regions.
|
|||
subresource depth
|
||||
** If the calling command's pname:srcImage is of type
|
||||
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then
|
||||
pname:srcOffset[0].z must: be `0` and pname:srcOffset[1].z must: be `1`.
|
||||
pname:srcOffset[0].z must: be `0` and pname:srcOffset[1].z must: be
|
||||
`1`.
|
||||
* pname:dstOffset[0].pname:x and pname:dstOffset[1].pname:x must: both be
|
||||
greater than or equal to `0` and less than or equal to the destination
|
||||
image subresource width
|
||||
|
@ -925,7 +927,8 @@ the specified source and destination regions.
|
|||
image subresource depth
|
||||
** If the calling command's pname:dstImage is of type
|
||||
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then
|
||||
pname:dstOffset[0].z must: be `0` and pname:dstOffset[1].z must: be `1`.
|
||||
pname:dstOffset[0].z must: be `0` and pname:dstOffset[1].z must: be
|
||||
`1`.
|
||||
****
|
||||
|
||||
include::../validity/structs/VkImageBlit.txt[]
|
||||
|
|
|
@ -600,6 +600,12 @@ include::../api/structs/VkDescriptorSetLayoutCreateInfo.txt[]
|
|||
* pname:pBindings is a pointer to an array of
|
||||
slink:VkDescriptorSetLayoutBinding structures.
|
||||
|
||||
.Valid Usage
|
||||
****
|
||||
* The slink:VkDescriptorSetLayoutBinding::pname:binding members of the
|
||||
elements of the pname:pBindings array must: each have different values.
|
||||
****
|
||||
|
||||
include::../validity/structs/VkDescriptorSetLayoutCreateInfo.txt[]
|
||||
|
||||
// refBegin VkDescriptorSetLayoutBinding Structure specifying a descriptor set layout binding
|
||||
|
@ -652,10 +658,11 @@ graphics stages and the compute stage.
|
|||
The above layout definition allows the descriptor bindings to be specified
|
||||
sparsely such that not all binding numbers between 0 and the maximum binding
|
||||
number need to be specified in the pname:pBindings array.
|
||||
However, all binding numbers between 0 and the maximum binding number may:
|
||||
consume memory in the descriptor set layout even if not all descriptor
|
||||
bindings are used, though it should: not consume additional memory from the
|
||||
descriptor pool.
|
||||
However, all binding numbers between 0 and the maximum binding number in the
|
||||
slink:VkDescriptorSetLayoutCreateInfo::pname:pBindings array may: consume
|
||||
memory in the descriptor set layout even if not all descriptor bindings are
|
||||
used, though it should: not consume additional memory from the descriptor
|
||||
pool.
|
||||
|
||||
[NOTE]
|
||||
.Note
|
||||
|
|
|
@ -474,8 +474,9 @@ The assembled primitives execute the currently bound graphics pipeline.
|
|||
.Valid Usage
|
||||
****
|
||||
* The current render pass must: be <<renderpass-compatibility,compatible>>
|
||||
with the pname:renderPass member of the sname:VkGraphicsPipelineCreateInfo
|
||||
structure specified when creating the sname:VkPipeline currently bound to
|
||||
with the pname:renderPass member of the
|
||||
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
|
||||
sname:VkPipeline currently bound to
|
||||
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
|
||||
* The subpass index of the current render pass must: be equal to the
|
||||
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
|
||||
|
@ -609,8 +610,9 @@ The assembled primitives execute the currently bound graphics pipeline.
|
|||
.Valid Usage
|
||||
****
|
||||
* The current render pass must: be <<renderpass-compatibility,compatible>>
|
||||
with the pname:renderPass member of the sname:VkGraphicsPipelineCreateInfo
|
||||
structure specified when creating the sname:VkPipeline currently bound to
|
||||
with the pname:renderPass member of the
|
||||
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
|
||||
sname:VkPipeline currently bound to
|
||||
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
|
||||
* The subpass index of the current render pass must: be equal to the
|
||||
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
|
||||
|
@ -746,8 +748,9 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
|
|||
sname:VkDrawIndirectCommand structures accessed by this command must: be
|
||||
code:0
|
||||
* The current render pass must: be <<renderpass-compatibility,compatible>>
|
||||
with the pname:renderPass member of the sname:VkGraphicsPipelineCreateInfo
|
||||
structure specified when creating the sname:VkPipeline currently bound to
|
||||
with the pname:renderPass member of the
|
||||
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
|
||||
sname:VkPipeline currently bound to
|
||||
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
|
||||
* The subpass index of the current render pass must: be equal to the
|
||||
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
|
||||
|
@ -919,8 +922,9 @@ located at pname:countBufferOffset and use this as the draw count.
|
|||
sname:VkDrawIndirectCommand structures accessed by this command must: be
|
||||
code:0
|
||||
* The current render pass must: be <<renderpass-compatibility,compatible>>
|
||||
with the pname:renderPass member of the sname:VkGraphicsPipelineCreateInfo
|
||||
structure specified when creating the sname:VkPipeline currently bound to
|
||||
with the pname:renderPass member of the
|
||||
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
|
||||
sname:VkPipeline currently bound to
|
||||
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
|
||||
* The subpass index of the current render pass must: be equal to the
|
||||
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
|
||||
|
@ -1047,8 +1051,9 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
|
|||
sname:VkDrawIndexedIndirectCommand structures accessed by this command
|
||||
must: be code:0
|
||||
* The current render pass must: be <<renderpass-compatibility,compatible>>
|
||||
with the pname:renderPass member of the sname:VkGraphicsPipelineCreateInfo
|
||||
structure specified when creating the sname:VkPipeline currently bound to
|
||||
with the pname:renderPass member of the
|
||||
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
|
||||
sname:VkPipeline currently bound to
|
||||
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
|
||||
* The subpass index of the current render pass must: be equal to the
|
||||
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
|
||||
|
@ -1227,8 +1232,9 @@ located at pname:countBufferOffset and use this as the draw count.
|
|||
sname:VkDrawIndexedIndirectCommand structures accessed by this command
|
||||
must: be code:0
|
||||
* The current render pass must: be <<renderpass-compatibility,compatible>>
|
||||
with the pname:renderPass member of the sname:VkGraphicsPipelineCreateInfo
|
||||
structure specified when creating the sname:VkPipeline currently bound to
|
||||
with the pname:renderPass member of the
|
||||
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
|
||||
sname:VkPipeline currently bound to
|
||||
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
|
||||
* The subpass index of the current render pass must: be equal to the
|
||||
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
|
||||
|
|
|
@ -3867,9 +3867,10 @@ limits in sname:VkPhysicalDeviceLimits as follows:
|
|||
If multiple bits are set in pname:usage, pname:sampleCounts will be the
|
||||
intersection of the per-usage values described above.
|
||||
|
||||
If none of the bits described above are set in pname:usage, then there
|
||||
is no corresponding limit in sname:VkPhysicalDeviceLimits. In this case,
|
||||
pname:sampleCounts must: include at least ename:VK_SAMPLE_COUNT_1_BIT.
|
||||
If none of the bits described above are set in pname:usage, then there is no
|
||||
corresponding limit in sname:VkPhysicalDeviceLimits.
|
||||
In this case, pname:sampleCounts must: include at least
|
||||
ename:VK_SAMPLE_COUNT_1_BIT.
|
||||
|
||||
|
||||
[[features-extentperimagetype]]
|
||||
|
|
|
@ -789,14 +789,14 @@ The code:ClipDistance decoration must: be used only within vertex, fragment,
|
|||
tessellation control, tessellation evaluation, and geometry shaders.
|
||||
+
|
||||
In vertex shaders, any variable decorated with code:ClipDistance must: be
|
||||
declared using the output storage class.
|
||||
declared using the code:Output storage class.
|
||||
+
|
||||
In fragment shaders, any variable decorated with code:ClipDistance must: be
|
||||
declared using the input storage class.
|
||||
declared using the code:Input storage class.
|
||||
+
|
||||
In tessellation control, tessellation evaluation, or geometry shaders, any
|
||||
variable decorated with code:ClipDistance must: not be in a storage class
|
||||
other than input or output.
|
||||
other than code:Input or code:Output.
|
||||
+
|
||||
Any variable decorated with code:ClipDistance must: be declared as an array
|
||||
of 32-bit floating-point values.
|
||||
|
@ -831,10 +831,10 @@ The code:CullDistance decoration must: be used only within vertex, fragment,
|
|||
tessellation control, tessellation evaluation, and geometry shaders.
|
||||
+
|
||||
In vertex shaders, any variable decorated with code:CullDistance must: be
|
||||
declared using the output storage class.
|
||||
declared using the code:Output storage class.
|
||||
+
|
||||
In fragment shaders, any variable decorated with code:CullDistance must: be
|
||||
declared using the input storage class.
|
||||
declared using the code:Input storage class.
|
||||
+
|
||||
In tessellation control, tessellation evaluation, or geometry shaders, any
|
||||
variable decorated with code:CullDistance must: not be declared in a storage
|
||||
|
@ -880,8 +880,8 @@ The [eq]#w# component is the interpolated latexmath:[$\frac{1}{w}$].
|
|||
+
|
||||
The code:FragCoord decoration must: be used only within fragment shaders.
|
||||
+
|
||||
The variable decorated with code:FragCoord must: be declared using the input
|
||||
storage class.
|
||||
The variable decorated with code:FragCoord must: be declared using the
|
||||
code:Input storage class.
|
||||
+
|
||||
The code:Centroid interpolation decoration is ignored on code:FragCoord.
|
||||
+
|
||||
|
@ -906,7 +906,7 @@ that path.
|
|||
The code:FragDepth decoration must: be used only within fragment shaders.
|
||||
+
|
||||
The variable decorated with code:FragDepth must: be declared using the
|
||||
output storage class.
|
||||
code:Output storage class.
|
||||
+
|
||||
The variable decorated with code:FragDepth must: be declared as a scalar
|
||||
32-bit floating-point value.
|
||||
|
@ -922,7 +922,7 @@ fragment is considered to be part of a back-facing primitive.
|
|||
The code:FrontFacing decoration must: be used only within fragment shaders.
|
||||
+
|
||||
The variable decorated with code:FrontFacing must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:FrontFacing must: be declared as a boolean.
|
||||
|
||||
|
@ -938,7 +938,7 @@ The code:GlobalInvocationId decoration must: be used only within compute
|
|||
shaders.
|
||||
+
|
||||
The variable decorated with code:GlobalInvocationId must: be declared using
|
||||
the input storage class.
|
||||
the code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:GlobalInvocationId must: be declared as a
|
||||
three-component vector of 32-bit integers.
|
||||
|
@ -957,7 +957,7 @@ The code:HelperInvocation decoration must: be used only within fragment
|
|||
shaders.
|
||||
+
|
||||
The variable decorated with code:HelperInvocation must: be declared using
|
||||
the input storage class.
|
||||
the code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:HelperInvocation must: be declared as a
|
||||
boolean.
|
||||
|
@ -986,7 +986,7 @@ The code:InvocationId decoration must: be used only within tessellation
|
|||
control and geometry shaders.
|
||||
+
|
||||
The variable decorated with code:InvocationId must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:InvocationId must: be declared as a scalar
|
||||
32-bit integer.
|
||||
|
@ -1004,7 +1004,7 @@ flink:vkCmdDrawIndexedIndirect.
|
|||
The code:InstanceIndex decoration must: be used only within vertex shaders.
|
||||
+
|
||||
The variable decorated with code:InstanceIndex must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:InstanceIndex must: be declared as a scalar
|
||||
32-bit integer.
|
||||
|
@ -1030,10 +1030,10 @@ The code:Layer decoration must: be used only within geometry and fragment
|
|||
shaders.
|
||||
+
|
||||
In a geometry shader, any variable decorated with code:Layer must: be
|
||||
declared using the output storage class.
|
||||
declared using the code:Output storage class.
|
||||
+
|
||||
In a fragment shader, any variable decorated with code:Layer must: be
|
||||
declared using the input storage class.
|
||||
declared using the code:Input storage class.
|
||||
+
|
||||
Any variable decorated with code:Layer must: be declared as a scalar 32-bit
|
||||
integer.
|
||||
|
@ -1050,7 +1050,7 @@ The code:LocalInvocationId decoration must: be used only within compute
|
|||
shaders.
|
||||
+
|
||||
The variable decorated with code:LocalInvocationId must: be declared using
|
||||
the input storage class.
|
||||
the code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:LocalInvocationId must: be declared as a
|
||||
three-component vector of 32-bit integers.
|
||||
|
@ -1078,7 +1078,7 @@ structure read through a call to flink:vkCmdDispatchIndirect.
|
|||
The code:NumWorkgroups decoration must: be used only within compute shaders.
|
||||
+
|
||||
The variable decorated with code:NumWorkgroups must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:NumWorkgroups must: be declared as a
|
||||
three-component vector of 32-bit integers.
|
||||
|
@ -1096,9 +1096,9 @@ The code:PatchVertices decoration must: be used only within tessellation
|
|||
control and tessellation evaluation shaders.
|
||||
+
|
||||
The variable decorated with code:PatchVertices must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:PatchVertices must: be declared as scalar
|
||||
The variable decorated with code:PatchVertices must: be declared as a scalar
|
||||
32-bit integer.
|
||||
|
||||
code:PointCoord::
|
||||
|
@ -1115,7 +1115,7 @@ value.
|
|||
The code:PointCoord decoration must: be used only within fragment shaders.
|
||||
+
|
||||
The variable decorated with code:PointCoord must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:PointCoord must: be declared as
|
||||
two-component vector of 32-bit floating-point values.
|
||||
|
@ -1139,11 +1139,11 @@ The code:PointSize decoration must: be used only within vertex, tessellation
|
|||
control, tessellation evaluation, and geometry shaders.
|
||||
+
|
||||
In a vertex shader, any variable decorated with code:PointSize must: be
|
||||
declared using the output storage class.
|
||||
declared using the code:Output storage class.
|
||||
+
|
||||
In a tessellation control, tessellation evaluation, or geometry shader, any
|
||||
variable decorated with code:PointSize must: be declared using either the
|
||||
input or output storage class.
|
||||
code:Input or code:Output storage class.
|
||||
+
|
||||
Any variable decorated with code:PointSize must: be declared as a scalar
|
||||
32-bit floating-point value.
|
||||
|
@ -1151,7 +1151,7 @@ Any variable decorated with code:PointSize must: be declared as a scalar
|
|||
[NOTE]
|
||||
.Note
|
||||
====
|
||||
When code:PointSize decorates a variable in the input storage class, it
|
||||
When code:PointSize decorates a variable in the code:Input storage class, it
|
||||
contains the data written to the output variable decorated with
|
||||
code:PointSize from the previous shader stage.
|
||||
====
|
||||
|
@ -1168,7 +1168,7 @@ The code:Position decoration must: be used only within vertex, tessellation
|
|||
control, tessellation evaluation, and geometry shaders.
|
||||
+
|
||||
In a vertex shader, any variable decorated with code:Position must: be
|
||||
declared using the output storage class.
|
||||
declared using the code:Output storage class.
|
||||
+
|
||||
In a tessellation control, tessellation evaluation, or geometry shader, any
|
||||
variable decorated with code:Position must: not be declared in a storage
|
||||
|
@ -1180,7 +1180,7 @@ four-component vector of 32-bit floating-point values.
|
|||
[NOTE]
|
||||
.Note
|
||||
====
|
||||
When code:Position decorates a variable in the input storage class, it
|
||||
When code:Position decorates a variable in the code:Input storage class, it
|
||||
contains the data written to the output variable decorated with
|
||||
code:Position from the previous shader stage.
|
||||
====
|
||||
|
@ -1211,14 +1211,18 @@ paths.
|
|||
The code:PrimitiveId decoration must: be used only within fragment,
|
||||
tessellation control, tessellation evaluation, and geometry shaders.
|
||||
+
|
||||
In a fragment, tessellation control or tessellation evaluation shader, any
|
||||
variable decorated with code:PrimitiveId must: be declared using the output
|
||||
In a tessellation control or tessellation evaluation shader, any variable
|
||||
decorated with code:PrimitiveId must: be declared using the code:Output
|
||||
storage class.
|
||||
+
|
||||
In a geometry shader, any variable decorated with code:PrimitiveId must: be
|
||||
declared using either the input or output storage class.
|
||||
declared using either the code:Input or code:Output storage class.
|
||||
+
|
||||
Any variable decorated with code:PrimitiveId must: be declared as scalar
|
||||
In a fragment shader, any variable decorated with code:PrimitiveId must: be
|
||||
declared using the code:Input storage class, and either the code:Geometry or
|
||||
code:Tessellation capability must also be declared.
|
||||
+
|
||||
Any variable decorated with code:PrimitiveId must: be declared as a scalar
|
||||
32-bit integer.
|
||||
|
||||
[NOTE]
|
||||
|
@ -1242,8 +1246,8 @@ use that fragment shader.
|
|||
+
|
||||
The code:SampleId decoration must: be used only within fragment shaders.
|
||||
+
|
||||
The variable decorated with code:SampleId must: be declared using the input
|
||||
storage class.
|
||||
The variable decorated with code:SampleId must: be declared using the
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:SampleId must: be declared as a scalar
|
||||
32-bit integer.
|
||||
|
@ -1254,9 +1258,9 @@ Decorating a variable with the code:SampleMask built-in decoration will make
|
|||
any variable contain the sample coverage mask for the current fragment
|
||||
shader invocation.
|
||||
+
|
||||
A variable in the input storage class decorated with code:SampleMask will
|
||||
contain a bitmask of the set of samples covered by the primitive generating
|
||||
the fragment during rasterization.
|
||||
A variable in the code:Input storage class decorated with code:SampleMask
|
||||
will contain a bitmask of the set of samples covered by the primitive
|
||||
generating the fragment during rasterization.
|
||||
It has a sample bit set if and only if the sample is considered covered for
|
||||
this fragment shader invocation.
|
||||
code:SampleMask[] is an array of integers.
|
||||
|
@ -1270,10 +1274,10 @@ to the invocation.
|
|||
In this case, the bit corresponding to each covered sample will be set in
|
||||
exactly one fragment shader invocation.
|
||||
+
|
||||
A variable in the output storage class decorated with code:SampleMask is an
|
||||
array of integers forming a bit array in a manner similar an input variable
|
||||
decorated with code:SampleMask, but where each bit represents coverage as
|
||||
computed by the shader.
|
||||
A variable in the code:Output storage class decorated with code:SampleMask
|
||||
is an array of integers forming a bit array in a manner similar an input
|
||||
variable decorated with code:SampleMask, but where each bit represents
|
||||
coverage as computed by the shader.
|
||||
Modifying the sample mask by writing zero to a bit of code:SampleMask causes
|
||||
the sample to be considered uncovered.
|
||||
However, setting sample mask bits to one will never enable samples not
|
||||
|
@ -1296,7 +1300,7 @@ the processing of a fragment.
|
|||
The code:SampleMask decoration must: be used only within fragment shaders.
|
||||
+
|
||||
Any variable decorated with code:SampleMask must: be declared using either
|
||||
the input or output storage class.
|
||||
the code:Input or code:Output storage class.
|
||||
+
|
||||
Any variable decorated with code:SampleMask must: be declared as an array of
|
||||
32-bit integers.
|
||||
|
@ -1316,7 +1320,7 @@ The code:SamplePosition decoration must: be used only within fragment
|
|||
shaders.
|
||||
+
|
||||
The variable decorated with code:SamplePosition must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:SamplePosition must: be declared as a
|
||||
two-component vector of 32-bit floating-point values.
|
||||
|
@ -1334,8 +1338,8 @@ component is always zero.
|
|||
The code:TessCoord decoration must: be used only within tessellation
|
||||
evaluation shaders.
|
||||
+
|
||||
The variable decorated with code:TessCoord must: be declared using the input
|
||||
storage class.
|
||||
The variable decorated with code:TessCoord must: be declared using the
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:TessCoord must: be declared as
|
||||
three-component vector of 32-bit floating-point values.
|
||||
|
@ -1360,10 +1364,10 @@ The code:TessLevelOuter decoration must: be used only within tessellation
|
|||
control and tessellation evaluation shaders.
|
||||
+
|
||||
In a tessellation control shader, any variable decorated with
|
||||
code:TessLevelOuter must: be declared using the output storage class.
|
||||
code:TessLevelOuter must: be declared using the code:Output storage class.
|
||||
+
|
||||
In a tessellation evaluation shader, any variable decorated with
|
||||
code:TessLevelOuter must: be declared using the input storage class.
|
||||
code:TessLevelOuter must: be declared using the code:Input storage class.
|
||||
+
|
||||
Any variable decorated with code:TessLevelOuter must: be declared as an
|
||||
array of size four, containing 32-bit floating-point values.
|
||||
|
@ -1388,10 +1392,10 @@ The code:TessLevelInner decoration must: be used only within tessellation
|
|||
control and tessellation evaluation shaders.
|
||||
+
|
||||
In a tessellation control shader, any variable decorated with
|
||||
code:TessLevelInner must: be declared using the output storage class.
|
||||
code:TessLevelInner must: be declared using the code:Output storage class.
|
||||
+
|
||||
In a tessellation evaluation shader, any variable decorated with
|
||||
code:TessLevelInner must: be declared using the input storage class.
|
||||
code:TessLevelInner must: be declared using the code:Input storage class.
|
||||
+
|
||||
Any variable decorated with code:TessLevelInner must: be declared as an
|
||||
array of size two, containing 32-bit floating-point values.
|
||||
|
@ -1413,7 +1417,7 @@ flink:vkCmdDrawIndexedIndirect.
|
|||
The code:VertexIndex decoration must: be used only within vertex shaders.
|
||||
+
|
||||
The variable decorated with code:VertexIndex must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:VertexIndex must: be declared as a scalar
|
||||
32-bit integer.
|
||||
|
@ -1448,10 +1452,10 @@ The code:ViewportIndex decoration must: be used only within geometry and
|
|||
fragment shaders.
|
||||
+
|
||||
In a geometry shader, any variable decorated with code:ViewportIndex must:
|
||||
be declared using the output storage class.
|
||||
be declared using the code:Output storage class.
|
||||
+
|
||||
In a fragment shader, any variable decorated with code:ViewportIndex must:
|
||||
be declared using the input storage class.
|
||||
be declared using the code:Input storage class.
|
||||
+
|
||||
Any variable decorated with code:ViewportIndex must: be declared as a scalar
|
||||
32-bit integer.
|
||||
|
@ -1468,7 +1472,7 @@ structure read through a call to flink:vkCmdDispatchIndirect.
|
|||
The code:WorkgroupId decoration must: be used only within compute shaders.
|
||||
+
|
||||
The variable decorated with code:WorkgroupId must: be declared using the
|
||||
input storage class.
|
||||
code:Input storage class.
|
||||
+
|
||||
The variable decorated with code:WorkgroupId must: be declared as a
|
||||
three-component vector of 32-bit integers.
|
||||
|
|
|
@ -381,8 +381,8 @@ include::../api/structs/VkGraphicsPipelineCreateInfo.txt[]
|
|||
* pname:layout is the description of binding locations used by both the
|
||||
pipeline and descriptor sets used with the pipeline.
|
||||
* pname:renderPass is a handle to a render pass object describing the
|
||||
environment in which the pipeline will be used; the pipeline must: only be
|
||||
used with an instance of any render pass compatible with the one
|
||||
environment in which the pipeline will be used; the pipeline must: only
|
||||
be used with an instance of any render pass compatible with the one
|
||||
provided.
|
||||
See <<renderpass-compatibility,Render Pass Compatibility>> for more
|
||||
information.
|
||||
|
@ -1087,6 +1087,9 @@ slink:VkSpecializationMapEntry.
|
|||
be less than pname:dataSize
|
||||
* For any given element of pname:pMapEntries, pname:size must: be less
|
||||
than or equal to pname:dataSize minus pname:offset
|
||||
* If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer
|
||||
to an array of pname:mapEntryCount valid sname:VkSpecializationMapEntry
|
||||
structures
|
||||
****
|
||||
|
||||
include::../validity/structs/VkSpecializationInfo.txt[]
|
||||
|
|
|
@ -1104,8 +1104,11 @@ pass.
|
|||
in pname:renderPass that specifies a pname:loadOp (or
|
||||
pname:stencilLoadOp, if the attachment has a depth/stencil format) of
|
||||
ename:VK_ATTACHMENT_LOAD_OP_CLEAR
|
||||
* pname:renderPass must: be <<renderpass-compatibility,compatible>>
|
||||
with the pname:renderPass member of the sname:VkFramebufferCreateInfo
|
||||
* If pname:clearValueCount is not `0`, pname:pClearValues must: be a
|
||||
pointer to an array of pname:clearValueCount valid sname:VkClearValue
|
||||
unions
|
||||
* pname:renderPass must: be <<renderpass-compatibility,compatible>> with
|
||||
the pname:renderPass member of the sname:VkFramebufferCreateInfo
|
||||
structure specified when creating pname:framebuffer.
|
||||
****
|
||||
|
||||
|
|
|
@ -291,8 +291,8 @@ include::../api/structs/VkBufferViewCreateInfo.txt[]
|
|||
* If pname:range is not equal to ename:VK_WHOLE_SIZE:
|
||||
** pname:range must: be greater than `0`
|
||||
** pname:range must: be a multiple of the element size of pname:format
|
||||
** pname:range divided by the element size of pname:format, must: be
|
||||
less than or equal to
|
||||
** pname:range divided by the element size of pname:format, must: be less
|
||||
than or equal to
|
||||
sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements
|
||||
** the sum of pname:offset and pname:range must: be less than or equal to
|
||||
the size of pname:buffer
|
||||
|
@ -519,6 +519,8 @@ flink:vkGetPhysicalDeviceImageFormatProperties.
|
|||
fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
|
||||
pname:type, pname:tiling, pname:usage, and pname:flags equal to those in
|
||||
this structure)
|
||||
* If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:arrayLayers must: be
|
||||
`1`.
|
||||
* If pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT, pname:imageType
|
||||
must: be ename:VK_IMAGE_TYPE_2D, pname:flags must: not contain
|
||||
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:tiling must: be
|
||||
|
@ -2037,6 +2039,12 @@ an ownership transfer in the same way as for a resource that was just
|
|||
created, however doing so means any contents written by other queue families
|
||||
or via incompatible aliases are undefined.
|
||||
|
||||
Ranges of buffers and image subresources of image objects created using
|
||||
ename:VK_SHARING_MODE_CONCURRENT must: only be accessed by queues from the
|
||||
queue families specified through the pname:queueFamilyIndexCount and
|
||||
pname:pQueueFamilyIndices members of the corresponding create info
|
||||
structures.
|
||||
|
||||
// refEnd VkSharingMode
|
||||
|
||||
|
||||
|
|
|
@ -104,8 +104,8 @@ pname:sparseResidency4Samples, pname:sparseResidency8Samples, and
|
|||
pname:sparseResidency16Samples.
|
||||
--
|
||||
** A sparse image created using ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
|
||||
supports all non-compressed color formats with power-of-two element size
|
||||
that non-sparse usage supports.
|
||||
supports all non-compressed color formats with power-of-two element
|
||||
size that non-sparse usage supports.
|
||||
Additional formats may: also be supported and can: be queried via
|
||||
flink:vkGetPhysicalDeviceSparseImageFormatProperties.
|
||||
ename:VK_IMAGE_TILING_LINEAR tiling is not supported.
|
||||
|
|
|
@ -365,7 +365,7 @@ prevent other work from overlapping with the presentation operation.
|
|||
For example, a sname:VkImageMemoryBarrier could use:
|
||||
|
||||
* pname:srcStageMask = ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
|
||||
* pname:srcAccessMask = ename:VK_ACCESS_MEMORY_READ_BIT
|
||||
* pname:srcAccessMask = 0
|
||||
* pname:dstStageMask = ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
|
||||
* pname:dstAccessMask = ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
|
||||
ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
|
||||
|
|
|
@ -124,7 +124,7 @@ n is the sample index and is taken from the code:Sample image operand.
|
|||
For all coordinate types, unused coordinates are assigned a value of zero.
|
||||
|
||||
[[textures-texel-coordinate-systems-diagrams]]
|
||||
image::images/vulkantexture0.png[Title="Texel Coordinate Systems", align="left", scaledwidth="80%"]
|
||||
image::images/vulkantexture0.png[align="center",title="Texel Coordinate Systems",{fullimagewidth}]
|
||||
The Texel Coordinate Systems - For the example shown of an 8x4 texel two
|
||||
dimensional image.
|
||||
|
||||
|
@ -154,7 +154,7 @@ dimensional image.
|
|||
four texels selected by the offset are [eq]#i~0~j'~0~#,
|
||||
[eq]#i~1~j'~0~#, [eq]#i~0~j'~1~#, and [eq]#i~1~j'~1~#.
|
||||
|
||||
image::images/vulkantexture1.png[Title="Texel Coordinate Systems", align="left", scaledwidth="80%"]
|
||||
image::images/vulkantexture1.png[align="center",title="Texel Coordinate Systems",{fullimagewidth}]
|
||||
|
||||
The Texel Coordinate Systems - For the example shown of an 8x4 texel two
|
||||
dimensional image.
|
||||
|
@ -826,7 +826,7 @@ SPIR-V derivative instructions include code:OpDPdx, code:OpDPdy,
|
|||
code:OpDPdxFine, code:OpDPdyFine, code:OpDPdxCoarse, and code:OpDPdyCoarse.
|
||||
Derivative instructions are only available in a fragment shader.
|
||||
|
||||
image::images/vulkantexture2.png[Title="Implicit derivatives",align="left", scaledwidth="50%"]
|
||||
image::images/vulkantexture2.png[align="center",title="Implicit Derivatives",{fullimagewidth}]
|
||||
|
||||
Derivatives are computed as if there is a 2x2 neighborhood of fragments for
|
||||
each fragment shader invocation.
|
||||
|
|
|
@ -380,6 +380,8 @@ replace the current state for the viewport index [eq]#pname:firstViewport
|
|||
sname:VkPhysicalDeviceLimits::pname:maxViewports
|
||||
* The sum of pname:firstViewport and pname:viewportCount must: be between
|
||||
`1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
|
||||
* pname:pViewports must: be a pointer to an array of pname:viewportCount
|
||||
valid sname:VkViewport structures
|
||||
****
|
||||
|
||||
include::../validity/protos/vkCmdSetViewport.txt[]
|
||||
|
|
|
@ -188,10 +188,6 @@ class HostSynchronizationOutputGenerator(OutputGenerator):
|
|||
# Command generation
|
||||
def genCmd(self, cmdinfo, name):
|
||||
OutputGenerator.genCmd(self, cmdinfo, name)
|
||||
#
|
||||
# Get all thh parameters
|
||||
params = cmdinfo.elem.findall('param')
|
||||
usages = cmdinfo.elem.findall('validity/usage')
|
||||
|
||||
self.makeThreadSafetyBlocks(cmdinfo.elem, 'param')
|
||||
|
||||
|
|
|
@ -150,8 +150,7 @@ Type = element type {
|
|||
element name { text },
|
||||
element enum { EnumName } ?
|
||||
}
|
||||
} * ,
|
||||
Validity ?
|
||||
} *
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -295,8 +294,7 @@ Command = element command {
|
|||
} ? &
|
||||
element implicitexternsyncparams {
|
||||
element param { text } *
|
||||
} ? &
|
||||
Validity ?
|
||||
} ?
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -320,20 +318,12 @@ Feature = element feature {
|
|||
element require {
|
||||
ProfileName ? ,
|
||||
Comment ? ,
|
||||
InterfaceElement *,
|
||||
element usage {
|
||||
attribute struct { text } *,
|
||||
attribute command { text } *,
|
||||
text } *
|
||||
InterfaceElement *
|
||||
} |
|
||||
element remove {
|
||||
ProfileName ? ,
|
||||
Comment ? ,
|
||||
InterfaceElement *,
|
||||
element usage {
|
||||
attribute struct { text } *,
|
||||
attribute command { text } *,
|
||||
text } *
|
||||
InterfaceElement *
|
||||
}
|
||||
) *
|
||||
}
|
||||
|
@ -375,21 +365,13 @@ Extension = element extension {
|
|||
attribute api { text } ? ,
|
||||
ProfileName ? ,
|
||||
Comment ? ,
|
||||
InterfaceElement *,
|
||||
element usage {
|
||||
attribute struct { text } *,
|
||||
attribute command { text } *,
|
||||
text } *
|
||||
InterfaceElement *
|
||||
} |
|
||||
element remove {
|
||||
attribute api { text } ? ,
|
||||
ProfileName ? ,
|
||||
Comment ? ,
|
||||
InterfaceElement *,
|
||||
element usage {
|
||||
attribute struct { text } *,
|
||||
attribute command { text } *,
|
||||
text } *
|
||||
InterfaceElement *
|
||||
}
|
||||
) *
|
||||
}
|
||||
|
@ -409,13 +391,6 @@ InterfaceElement =
|
|||
Comment ?
|
||||
}
|
||||
|
||||
# Defines validation text for the Vulkan spec and reference pages.
|
||||
# Consists of multiple <usage> tags, each containing arbitrary
|
||||
# asciidoc text.
|
||||
Validity = element validity {
|
||||
element usage { text } *
|
||||
}
|
||||
|
||||
# Integers are allowed to be either decimal or C-hex (0x[0-9A-F]+), but
|
||||
# XML Schema types don't seem to support hex notation, so we use this
|
||||
# as a placeholder.
|
||||
|
|
|
@ -351,9 +351,7 @@ If the attr:category tag has the values +struct+ or +union+, the
|
|||
type is a C structure or union, respectively. In this case, the attr:name
|
||||
attribute must be provided, and the contents of the tag:type tag are a
|
||||
series of tag:member tags defining the members of the aggregate type, in
|
||||
order, followed by an optional tag:validity tag including asciidoc
|
||||
validation language for the structure contents.
|
||||
|
||||
order.
|
||||
|
||||
==== Structure member (tag:member) tags
|
||||
|
||||
|
@ -381,9 +379,7 @@ member.
|
|||
+VK_NULL_HANDLE+ (for handles), 0 (for bitmasks), or 0 for values
|
||||
that are the size of an array in the same structure. If the member
|
||||
is a pointer to one of those types, multiple values may be provided,
|
||||
separated by commas - one for each pointer indirection. Note that
|
||||
this only affects automatic validity statements - explicit
|
||||
statements remain unchanged.
|
||||
separated by commas - one for each pointer indirection.
|
||||
* attr:noautovalidity - prevents automatic validity language being
|
||||
generated for the tagged item. Only suppresses item-specific
|
||||
validity - parenting issues etc. are still captured.
|
||||
|
@ -401,19 +397,6 @@ contain two semantic tags:
|
|||
* The tag:name tag is required, and contains the struct/union member
|
||||
name being described.
|
||||
|
||||
==== Validation (tag:validity) tags
|
||||
|
||||
The tag:validity tag, if present defines valid use cases and values for
|
||||
structure members.
|
||||
|
||||
|
||||
==== Contents of tag:validity tags
|
||||
|
||||
Each tag:validity tag contains zero or more tag:usage tags. Each
|
||||
tag:usage tag is intended to represent a specific validation requirement
|
||||
for the structure and include arbitrary asciidoc text describing that
|
||||
requirement.
|
||||
|
||||
|
||||
=== All other types
|
||||
|
||||
|
@ -666,8 +649,6 @@ command (function).
|
|||
* tag:param elements for each command parameter follow, defining its
|
||||
name and type, as described below. If a command takes no arguments,
|
||||
it has no tag:param tags.
|
||||
* An optional tag:validity tag including asciidoc validation language
|
||||
for the command parameters.
|
||||
|
||||
Following these elements, the remaining elements in a tag:command
|
||||
tag are optional and may be in any order:
|
||||
|
@ -737,18 +718,29 @@ members.
|
|||
+VK_NULL_HANDLE+ (for handles), 0 (for bitmasks), or 0 for values
|
||||
that are the size of an array in the same command. If the member is
|
||||
a pointer to one of those types, multiple values may be provided,
|
||||
separated by commas - one for each pointer indirection. Note that
|
||||
this only affects automatic validity statements - explicit
|
||||
statements remain unchanged.
|
||||
separated by commas - one for each pointer indirection.
|
||||
* attr:noautovalidity - prevents automatic validity language being
|
||||
generated for the tagged item. Only suppresses item-specific
|
||||
validity - parenting issues etc. are still captured.
|
||||
* attr:externsync - optional. A boolean string, which must have the
|
||||
value +"true"+ if present, indicating that this parameter (e.g. the
|
||||
object a handle refers to, or the contents of an array a pointer
|
||||
refers to) is modified by the command, and is not protected against
|
||||
modification in multiple app threads. Parameters which do not have
|
||||
this attribute are assumed to not require external synchronization.
|
||||
* attr:externsync - optional. A value of +"true"+ indicates that this
|
||||
parameter (e.g. the object a handle refers to, or the contents of an
|
||||
array a pointer refers to) is modified by the command, and is not
|
||||
protected against modification in multiple app threads. If only certain
|
||||
members of an object or elements of an array are modified, multiple
|
||||
strings may be provided, separated by commas. Each string describes a
|
||||
member which is modified. For example, the +vkQueueSubmit+ command
|
||||
includes attr:externsync attributes for the +pSubmits+ array indicating
|
||||
that only specific members of each element of the array are modified:
|
||||
+
|
||||
--
|
||||
[source,{basebackend@docbook:c++:cpp}]
|
||||
--------------------------------------
|
||||
<param len="submitCount" externsync="pSubmits[].pWaitSemaphores[],pSubmits[].pSignalSemaphores[]">const <type>VkSubmitInfo</type>* <name>pSubmits</name></param>
|
||||
--------------------------------------
|
||||
|
||||
Parameters which do not have an attr:externsync attribute are assumed to not
|
||||
require external synchronization.
|
||||
--
|
||||
|
||||
=== Contents of tag:param tags
|
||||
|
||||
|
@ -787,20 +779,6 @@ VkResult vkCreateInstance(
|
|||
--------------------------------------
|
||||
|
||||
|
||||
[[tag-command:validity]]
|
||||
== Parameter validation (tag:validity) tags
|
||||
|
||||
The tag:validity tag, if present defines valid use cases and values for
|
||||
command parameters
|
||||
|
||||
=== Contents of tag:validity tags
|
||||
|
||||
Each tag:validity tag contains zero or more tag:usage tags. Each
|
||||
tag:usage tag is intended to represent a specific validation requirement
|
||||
for the command, and contains arbitrary asciidoc text describing that
|
||||
requirement.
|
||||
|
||||
|
||||
[[tag-feature]]
|
||||
= API Features and Versions (tag:feature tag)
|
||||
|
||||
|
@ -989,12 +967,12 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
|
|||
= Required and Removed Interfaces (tag:require and tag:remove tags)
|
||||
|
||||
A tag:require block defines a set of interfaces (types, enumerants and
|
||||
commands) and additional validity statements 'required' by a tag:feature
|
||||
or tag:extension. A tag:remove block defines a set of interfaces or
|
||||
validity statements 'removed' by a tag:feature. This is primarily for
|
||||
commands) 'required' by a tag:feature
|
||||
or tag:extension. A tag:remove block defines a set of interfaces
|
||||
'removed' by a tag:feature. This is primarily for
|
||||
future profiles of an API which may choose to deprecate and/or remove
|
||||
some interfaces - or for profiles or extensions to remove validity
|
||||
statements. Extensions should never remove interfaces, although this
|
||||
some interfaces.
|
||||
Extensions should never remove interfaces, although this
|
||||
usage is allowed by the schema). Except for the tag name and behavior,
|
||||
the contents of tag:require and tag:remove tags are identical.
|
||||
|
||||
|
@ -1083,18 +1061,6 @@ content, but contains elements:
|
|||
* attr:name - required. Name of the type.
|
||||
* attr:comment - optional. Arbitrary string (unused).
|
||||
|
||||
=== Usage Tags
|
||||
|
||||
tag:usage specifies a required (or removed) validity statement for a
|
||||
tag:validity block belonging to a tag:proto or tag:type block. Validity
|
||||
is more likely to be removed by extensions than other items. One of
|
||||
struct or command must be present.
|
||||
|
||||
* attr:struct - optional. Name of the structure this validity is added
|
||||
to (or removed from).
|
||||
* attr:comment - optional. Name of the command this validity is added
|
||||
to (or removed from).
|
||||
|
||||
|
||||
[[tag-required:examples]]
|
||||
== Examples of Extension Enumerants
|
||||
|
@ -1756,6 +1722,8 @@ files and Python scripts are logged in Github history.
|
|||
[[changelog]]
|
||||
= Change Log
|
||||
|
||||
* 2016-09-27 - remove tag:validity and tag:usage tags, since these
|
||||
explicit usage statements have been moved to the specification source.
|
||||
* 2016-08-26 - Update for the single-branch model.
|
||||
* 2016-07-28 - Add attr:type and attr:requires attributes to tag:extension
|
||||
tags.
|
||||
|
|
|
@ -73,7 +73,7 @@ class ValidityOutputGenerator(OutputGenerator):
|
|||
# directory - subdirectory to put file in
|
||||
# basename - base name of the file
|
||||
# contents - contents of the file (Asciidoc boilerplate aside)
|
||||
def writeInclude(self, directory, basename, validity, usages, threadsafety, commandpropertiesentry, successcodes, errorcodes):
|
||||
def writeInclude(self, directory, basename, validity, threadsafety, commandpropertiesentry, successcodes, errorcodes):
|
||||
# Create subdirectory, if needed
|
||||
directory = self.genOpts.directory + '/' + directory
|
||||
self.makeDir(directory)
|
||||
|
@ -139,19 +139,6 @@ class ValidityOutputGenerator(OutputGenerator):
|
|||
|
||||
fp.close()
|
||||
|
||||
# Create plain-text validity include - interim measure
|
||||
if usages and len(usages) > 0:
|
||||
filename = self.genOpts.directory + '/' + basename + '.txt'
|
||||
self.logMsg('diag', '# Generating plain-text include file:', filename)
|
||||
fp = open(filename, 'w')
|
||||
|
||||
# Add each plain-text <usage> tag
|
||||
if usages:
|
||||
for usage in usages:
|
||||
write('* ' + usage, file=fp)
|
||||
|
||||
fp.close()
|
||||
|
||||
#
|
||||
# Check if the parameter passed in is a pointer
|
||||
def paramIsPointer(self, param):
|
||||
|
@ -465,10 +452,6 @@ class ValidityOutputGenerator(OutputGenerator):
|
|||
struct = self.registry.tree.find("types/type[@name='" + structname + "']")
|
||||
|
||||
params = struct.findall('member')
|
||||
validity = struct.find('validity')
|
||||
|
||||
if validity is not None:
|
||||
return False
|
||||
|
||||
for param in params:
|
||||
paramname = param.find('name')
|
||||
|
@ -716,7 +699,7 @@ class ValidityOutputGenerator(OutputGenerator):
|
|||
|
||||
#
|
||||
# Generate all the valid usage information for a given struct or command
|
||||
def makeValidUsageStatements(self, cmd, blockname, params, usages):
|
||||
def makeValidUsageStatements(self, cmd, blockname, params):
|
||||
# Start the asciidoc block for this
|
||||
asciidoc = ''
|
||||
|
||||
|
@ -869,10 +852,6 @@ class ValidityOutputGenerator(OutputGenerator):
|
|||
# Find the common ancestor of all objects referenced in this command
|
||||
asciidoc += self.makeAsciiDocHandlesCommonAncestor(handles, params)
|
||||
|
||||
# Include the plain-text validation language from the usages[] array
|
||||
if len(usages) > 0:
|
||||
asciidoc += 'include::../' + blockname + '.txt[]\n'
|
||||
|
||||
# In case there's nothing to report, return None
|
||||
if asciidoc == '':
|
||||
return None
|
||||
|
@ -991,23 +970,14 @@ class ValidityOutputGenerator(OutputGenerator):
|
|||
#
|
||||
# Get all the parameters
|
||||
params = cmdinfo.elem.findall('param')
|
||||
usageelements = cmdinfo.elem.findall('validity/usage')
|
||||
usages = []
|
||||
|
||||
for usage in usageelements:
|
||||
usages.append(usage.text)
|
||||
for usage in cmdinfo.additionalValidity:
|
||||
usages.append(usage.text)
|
||||
for usage in cmdinfo.removedValidity:
|
||||
usages.remove(usage.text)
|
||||
|
||||
validity = self.makeValidUsageStatements(cmdinfo.elem, name, params, usages)
|
||||
validity = self.makeValidUsageStatements(cmdinfo.elem, name, params)
|
||||
threadsafety = self.makeThreadSafetyBlock(cmdinfo.elem, 'param')
|
||||
commandpropertiesentry = self.makeCommandPropertiesTableEntry(cmdinfo.elem, name)
|
||||
successcodes = self.makeSuccessCodes(cmdinfo.elem, name)
|
||||
errorcodes = self.makeErrorCodes(cmdinfo.elem, name)
|
||||
|
||||
self.writeInclude('protos', name, validity, usages, threadsafety, commandpropertiesentry, successcodes, errorcodes)
|
||||
self.writeInclude('protos', name, validity, threadsafety, commandpropertiesentry, successcodes, errorcodes)
|
||||
|
||||
#
|
||||
# Struct Generation
|
||||
|
@ -1018,23 +988,13 @@ class ValidityOutputGenerator(OutputGenerator):
|
|||
if typeinfo.elem.attrib.get('returnedonly') is None:
|
||||
params = typeinfo.elem.findall('member')
|
||||
|
||||
usageelements = typeinfo.elem.findall('validity/usage')
|
||||
usages = []
|
||||
|
||||
for usage in usageelements:
|
||||
usages.append(usage.text)
|
||||
for usage in typeinfo.additionalValidity:
|
||||
usages.append(usage.text)
|
||||
for usage in typeinfo.removedValidity:
|
||||
usages.remove(usage.text)
|
||||
|
||||
validity = self.makeValidUsageStatements(typeinfo.elem, typename, params, usages)
|
||||
validity = self.makeValidUsageStatements(typeinfo.elem, typename, params)
|
||||
threadsafety = self.makeThreadSafetyBlock(typeinfo.elem, 'member')
|
||||
|
||||
self.writeInclude('structs', typename, validity, usages, threadsafety, None, None, None)
|
||||
self.writeInclude('structs', typename, validity, threadsafety, None, None, None)
|
||||
else:
|
||||
# Still generate files for return only structs, in case this state changes later
|
||||
self.writeInclude('structs', typename, None, None, None, None, None, None)
|
||||
self.writeInclude('structs', typename, None, None, None, None, None)
|
||||
|
||||
#
|
||||
# Group (e.g. C "enum" type) generation.
|
||||
|
|
474
src/spec/vk.xml
474
src/spec/vk.xml
File diff suppressed because it is too large
Load Diff
|
@ -43,7 +43,7 @@ extern "C" {
|
|||
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
|
||||
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
|
||||
// Version of this file
|
||||
#define VK_HEADER_VERSION 31
|
||||
#define VK_HEADER_VERSION 32
|
||||
|
||||
|
||||
#define VK_NULL_HANDLE 0
|
||||
|
@ -4000,7 +4000,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
|
|||
#endif
|
||||
|
||||
#define VK_AMD_negative_viewport_height 1
|
||||
#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 0
|
||||
#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
|
||||
#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
|
||||
|
||||
|
||||
|
@ -4010,7 +4010,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
|
|||
|
||||
|
||||
#define VK_AMD_shader_ballot 1
|
||||
#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 0
|
||||
#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
|
||||
#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue