Clarify pointer autovalidity and threading

1) State more explicitly in implicit VUs if a "valid" pointer is required
2) For some time Implicit validity is quite explicit in implicit VU
sections. Update pointer implicit validity chapter section as such.
3) Sometimes pointer parameter can be ignored. Update implicit pointer
validity section as such.
4) Changeing to more forceful language, to clarify memory behind
pointers need synchronizing too
This commit is contained in:
Petr Kraus 2017-09-11 19:04:13 +02:00
parent 52d809dd04
commit 4a45ecf5cc
11 changed files with 59 additions and 47 deletions

View File

@ -299,7 +299,7 @@ ifdef::VK_KHR_shared_presentable_image[]
endif::VK_KHR_shared_presentable_image[] endif::VK_KHR_shared_presentable_image[]
* [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277]] * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277]]
If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT, If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:pQueueFamilyIndices must: be a pointer to an array of pname:pQueueFamilyIndices must: be a valid pointer to an array of
pname:queueFamilyIndexCount basetype:uint32_t values pname:queueFamilyIndexCount basetype:uint32_t values
* [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278]] * [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278]]
If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT, If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,

View File

@ -504,7 +504,7 @@ recorded into it, becomes <<commandbuffers-lifecycle, invalid>>.
All elements of pname:pCommandBuffers must: not be in the All elements of pname:pCommandBuffers must: not be in the
<<commandbuffers-lifecycle, pending state>> <<commandbuffers-lifecycle, pending state>>
* [[VUID-vkFreeCommandBuffers-pCommandBuffers-00048]] * [[VUID-vkFreeCommandBuffers-pCommandBuffers-00048]]
pname:pCommandBuffers must: be a pointer to an array of pname:pCommandBuffers must: be a valid pointer to an array of
pname:commandBufferCount sname:VkCommandBuffer handles, each element of pname:commandBufferCount sname:VkCommandBuffer handles, each element of
which must: either be a valid handle or `NULL` which must: either be a valid handle or `NULL`
**** ****

View File

@ -747,7 +747,7 @@ avoid wasted memory.
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
pname:descriptorCount is not `0` and pname:pImmutableSamplers is not pname:descriptorCount is not `0` and pname:pImmutableSamplers is not
`NULL`, pname:pImmutableSamplers must: be a pointer to an array of `NULL`, pname:pImmutableSamplers must: be a valid pointer to an array of
pname:descriptorCount valid sname:VkSampler handles pname:descriptorCount valid sname:VkSampler handles
* [[VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283]] * [[VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283]]
If pname:descriptorCount is not `0`, pname:stageFlags must: be a valid If pname:descriptorCount is not `0`, pname:stageFlags must: be a valid
@ -1665,7 +1665,7 @@ in pname:pDescriptorSets are invalid.
All submitted commands that refer to any element of All submitted commands that refer to any element of
pname:pDescriptorSets must: have completed execution pname:pDescriptorSets must: have completed execution
* [[VUID-vkFreeDescriptorSets-pDescriptorSets-00310]] * [[VUID-vkFreeDescriptorSets-pDescriptorSets-00310]]
pname:pDescriptorSets must: be a pointer to an array of pname:pDescriptorSets must: be a valid pointer to an array of
pname:descriptorSetCount sname:VkDescriptorSet handles, each element of pname:descriptorSetCount sname:VkDescriptorSet handles, each element of
which must: either be a valid handle or dlink:VK_NULL_HANDLE which must: either be a valid handle or dlink:VK_NULL_HANDLE
* [[VUID-vkFreeDescriptorSets-pDescriptorSets-00311]] * [[VUID-vkFreeDescriptorSets-pDescriptorSets-00311]]
@ -1838,19 +1838,19 @@ bindings as needed to update all pname:descriptorCount descriptors.
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pname:pImageInfo must: be a ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pname:pImageInfo must: be a
pointer to an array of pname:descriptorCount valid valid pointer to an array of pname:descriptorCount valid
sname:VkDescriptorImageInfo structures sname:VkDescriptorImageInfo structures
* [[VUID-VkWriteDescriptorSet-descriptorType-00323]] * [[VUID-VkWriteDescriptorSet-descriptorType-00323]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, pname:pTexelBufferView or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, pname:pTexelBufferView
must: be a pointer to an array of pname:descriptorCount valid must: be a valid pointer to an array of pname:descriptorCount valid
sname:VkBufferView handles sname:VkBufferView handles
* [[VUID-VkWriteDescriptorSet-descriptorType-00324]] * [[VUID-VkWriteDescriptorSet-descriptorType-00324]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pname:pBufferInfo must: ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pname:pBufferInfo must:
be a pointer to an array of pname:descriptorCount valid be a valid pointer to an array of pname:descriptorCount valid
sname:VkDescriptorBufferInfo structures sname:VkDescriptorBufferInfo structures
* [[VUID-VkWriteDescriptorSet-descriptorType-00325]] * [[VUID-VkWriteDescriptorSet-descriptorType-00325]]
If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
@ -2434,8 +2434,8 @@ include::../api/protos/vkUpdateDescriptorSetWithTemplateKHR.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-vkUpdateDescriptorSetWithTemplateKHR-pData-01685]] * [[VUID-vkUpdateDescriptorSetWithTemplateKHR-pData-01685]]
pname:pData must: be a pointer to a memory that contains one or more pname:pData must: be a valid pointer to a memory that contains one or
valid instances of slink:VkDescriptorImageInfo, more valid instances of slink:VkDescriptorImageInfo,
slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
by pname:descriptorUpdateTemplate when it was created with by pname:descriptorUpdateTemplate when it was created with
flink:vkCreateDescriptorUpdateTemplateKHR flink:vkCreateDescriptorUpdateTemplateKHR
@ -2768,8 +2768,8 @@ include::../api/protos/vkCmdPushDescriptorSetWithTemplateKHR.txt[]
update template must: be supported by the pname:commandBuffer's parent update template must: be supported by the pname:commandBuffer's parent
sname:VkCommandPool's queue family sname:VkCommandPool's queue family
* [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686]] * [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686]]
pname:pData must: be a pointer to a memory that contains one or more pname:pData must: be a valid pointer to a memory that contains one or
valid instances of slink:VkDescriptorImageInfo, more valid instances of slink:VkDescriptorImageInfo,
slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined slink:VkDescriptorBufferInfo, or slink:VkBufferView in a layout defined
by pname:descriptorUpdateTemplate when it was created with by pname:descriptorUpdateTemplate when it was created with
flink:vkCreateDescriptorUpdateTemplateKHR flink:vkCreateDescriptorUpdateTemplateKHR

View File

@ -134,7 +134,7 @@ pname:discardRectangleCount)#.
sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles, sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles,
inclusive inclusive
* [[VUID-vkCmdSetDiscardRectangleEXT-pDiscardRectangles-00586]] * [[VUID-vkCmdSetDiscardRectangleEXT-pDiscardRectangles-00586]]
pname:pDiscardRectangles must: be a pointer to an array of pname:pDiscardRectangles must: be a valid pointer to an array of
pname:discardRectangleCount valid sname:VkRect2D structures pname:discardRectangleCount valid sname:VkRect2D structures
* [[VUID-vkCmdSetDiscardRectangleEXT-x-00587]] * [[VUID-vkCmdSetDiscardRectangleEXT-x-00587]]
The pname:x and pname:y members of pname:offset in sname:VkRect2D must: The pname:x and pname:y members of pname:offset in sname:VkRect2D must:

View File

@ -268,10 +268,12 @@ frees.
It is an application's responsibility to track the lifetime of Vulkan It is an application's responsibility to track the lifetime of Vulkan
objects, and not to destroy them while they are still in use. objects, and not to destroy them while they are still in use.
Application-owned memory is immediately consumed by any Vulkan command it is [[fundamentals-objectmodel-lifetime-acquire]]
passed into. The ownership of application-owned memory is immediately acquired by any
The application can: alter or free this memory as soon as the commands that Vulkan command it is passed into.
consume it have returned. Ownership of such memory must: be released back to the application at the
end of the duration of the command, so that the application can: alter or
free this memory as soon as all the commands that acquired it have returned.
The following object types are consumed when they are passed into a Vulkan The following object types are consumed when they are passed into a Vulkan
command and not further accessed by the objects they are used to create. command and not further accessed by the objects they are used to create.
@ -600,6 +602,16 @@ library) perform memory barriers as a part of mutual exclusion, so mutexing
Vulkan objects via these primitives will have the desired effect. Vulkan objects via these primitives will have the desired effect.
==== ====
Similarly the application must: avoid any potential data hazard of
application-owned memory that has its
<<fundamentals-objectmodel-lifetime-acquire,ownership temporarily acquired>>
by a Vulkan command.
While the ownership of application-owned memory remains acquired by a
command the implementation may: read the memory at any point, and it may:
write non-code:const qualified memory at any point.
Parameters referring to non-code:const qualified application-owned memory
are not marked explicitly as _externally synchronized_ in the specification.
Many object types are _immutable_, meaning the objects cannot: change once Many object types are _immutable_, meaning the objects cannot: change once
they have been created. they have been created.
These types of objects never need external synchronization, except that they These types of objects never need external synchronization, except that they
@ -754,13 +766,13 @@ commands, which will silently ignore these values.
[[fundamentals-validusage-pointers]] [[fundamentals-validusage-pointers]]
==== Valid Usage for Pointers ==== Valid Usage for Pointers
Any parameter that is a pointer must: either be a valid pointer, or if Any parameter that is a pointer must: be a _valid pointer_ only if it is
_explicitly called out in the specification_, can: be `NULL`. explicitly called out by a Valid Usage statement.
A pointer is valid if it points at memory containing values of the number
and type(s) expected by the command, and all fundamental types accessed
through the pointer (e.g. as elements of an array or as members of a
structure) satisfy the alignment requirements of the host processor.
A pointer is "`valid`" if it points at memory containing values of the
number and type(s) expected by the command, and all fundamental types
accessed through the pointer (e.g. as elements of an array or as members of
a structure) satisfy the alignment requirements of the host processor.
[[fundamentals-validusage-strings]] [[fundamentals-validusage-strings]]
==== Valid Usage for Strings ==== Valid Usage for Strings

View File

@ -60,13 +60,13 @@ include::../api/structs/VkAllocationCallbacks.txt[]
.Valid Usage .Valid Usage
**** ****
* [[VUID-VkAllocationCallbacks-pfnAllocation-00632]] * [[VUID-VkAllocationCallbacks-pfnAllocation-00632]]
pname:pfnAllocation must: be a pointer to a valid user-defined pname:pfnAllocation must: be a valid pointer to a valid user-defined
tlink:PFN_vkAllocationFunction tlink:PFN_vkAllocationFunction
* [[VUID-VkAllocationCallbacks-pfnReallocation-00633]] * [[VUID-VkAllocationCallbacks-pfnReallocation-00633]]
pname:pfnReallocation must: be a pointer to a valid user-defined pname:pfnReallocation must: be a valid pointer to a valid user-defined
tlink:PFN_vkReallocationFunction tlink:PFN_vkReallocationFunction
* [[VUID-VkAllocationCallbacks-pfnFree-00634]] * [[VUID-VkAllocationCallbacks-pfnFree-00634]]
pname:pfnFree must: be a pointer to a valid user-defined pname:pfnFree must: be a valid pointer to a valid user-defined
tlink:PFN_vkFreeFunction tlink:PFN_vkFreeFunction
* [[VUID-VkAllocationCallbacks-pfnInternalAllocation-00635]] * [[VUID-VkAllocationCallbacks-pfnInternalAllocation-00635]]
If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not

View File

@ -523,7 +523,7 @@ endif::VK_NV_glsl_shader[]
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00731]] * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00731]]
If pname:pStages includes a tessellation control shader stage and a If pname:pStages includes a tessellation control shader stage and a
tessellation evaluation shader stage, pname:pTessellationState must: be tessellation evaluation shader stage, pname:pTessellationState must: be
a pointer to a valid sname:VkPipelineTessellationStateCreateInfo a valid pointer to a valid sname:VkPipelineTessellationStateCreateInfo
structure structure
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00732]] * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00732]]
If pname:pStages includes tessellation shader stages, the shader code of If pname:pStages includes tessellation shader stages, the shader code of
@ -616,12 +616,12 @@ endif::VK_KHR_maintenance2[]
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00747]] * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00747]]
If no element of the pname:pDynamicStates member of pname:pDynamicState If no element of the pname:pDynamicStates member of pname:pDynamicState
is ename:VK_DYNAMIC_STATE_VIEWPORT, the pname:pViewports member of is ename:VK_DYNAMIC_STATE_VIEWPORT, the pname:pViewports member of
pname:pViewportState must: be a pointer to an array of pname:pViewportState must: be a valid pointer to an array of
pname:pViewportState::pname:viewportCount sname:VkViewport structures pname:pViewportState::pname:viewportCount sname:VkViewport structures
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00748]] * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00748]]
If no element of the pname:pDynamicStates member of pname:pDynamicState If no element of the pname:pDynamicStates member of pname:pDynamicState
is ename:VK_DYNAMIC_STATE_SCISSOR, the pname:pScissors member of is ename:VK_DYNAMIC_STATE_SCISSOR, the pname:pScissors member of
pname:pViewportState must: be a pointer to an array of pname:pViewportState must: be a valid pointer to an array of
pname:pViewportState::pname:scissorCount sname:VkRect2D structures pname:pViewportState::pname:scissorCount sname:VkRect2D structures
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749]] * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749]]
If the wide lines feature is not enabled, and no element of the If the wide lines feature is not enabled, and no element of the
@ -630,21 +630,21 @@ endif::VK_KHR_maintenance2[]
pname:pRasterizationState must: be `1.0` pname:pRasterizationState must: be `1.0`
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750]] * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750]]
If the pname:rasterizerDiscardEnable member of pname:pRasterizationState If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, pname:pViewportState must: be a pointer to a valid is ename:VK_FALSE, pname:pViewportState must: be a valid pointer to a
sname:VkPipelineViewportStateCreateInfo structure valid sname:VkPipelineViewportStateCreateInfo structure
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751]] * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751]]
If the pname:rasterizerDiscardEnable member of pname:pRasterizationState If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, pname:pMultisampleState must: be a pointer to a valid is ename:VK_FALSE, pname:pMultisampleState must: be a valid pointer to a
sname:VkPipelineMultisampleStateCreateInfo structure valid sname:VkPipelineMultisampleStateCreateInfo structure
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00752]] * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00752]]
If the pname:rasterizerDiscardEnable member of pname:pRasterizationState If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, and pname:subpass uses a depth/stencil attachment, is ename:VK_FALSE, and pname:subpass uses a depth/stencil attachment,
pname:pDepthStencilState must: be a pointer to a valid pname:pDepthStencilState must: be a valid pointer to a valid
sname:VkPipelineDepthStencilStateCreateInfo structure sname:VkPipelineDepthStencilStateCreateInfo structure
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00753]] * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00753]]
If the pname:rasterizerDiscardEnable member of pname:pRasterizationState If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, and pname:subpass uses color attachments, is ename:VK_FALSE, and pname:subpass uses color attachments,
pname:pColorBlendState must: be a pointer to a valid pname:pColorBlendState must: be a valid pointer to a valid
sname:VkPipelineColorBlendStateCreateInfo structure sname:VkPipelineColorBlendStateCreateInfo structure
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754]] * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754]]
If the depth bias clamping feature is not enabled, no element of the If the depth bias clamping feature is not enabled, no element of the
@ -1390,9 +1390,9 @@ slink:VkSpecializationMapEntry.
The pname:size member of each element of pname:pMapEntries must: be less The pname:size member of each element of pname:pMapEntries must: be less
than or equal to pname:dataSize minus pname:offset than or equal to pname:dataSize minus pname:offset
* [[VUID-VkSpecializationInfo-mapEntryCount-00775]] * [[VUID-VkSpecializationInfo-mapEntryCount-00775]]
If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a valid
to an array of pname:mapEntryCount valid sname:VkSpecializationMapEntry pointer to an array of pname:mapEntryCount valid
structures sname:VkSpecializationMapEntry structures
**** ****
include::../validity/structs/VkSpecializationInfo.txt[] include::../validity/structs/VkSpecializationInfo.txt[]

View File

@ -1750,7 +1750,7 @@ pass.
pname:stencilLoadOp, if the attachment has a depth/stencil format) of pname:stencilLoadOp, if the attachment has a depth/stencil format) of
ename:VK_ATTACHMENT_LOAD_OP_CLEAR ename:VK_ATTACHMENT_LOAD_OP_CLEAR
* [[VUID-VkRenderPassBeginInfo-clearValueCount-00903]] * [[VUID-VkRenderPassBeginInfo-clearValueCount-00903]]
If pname:clearValueCount is not `0`, pname:pClearValues must: be a If pname:clearValueCount is not `0`, pname:pClearValues must: be a valid
pointer to an array of pname:clearValueCount valid sname:VkClearValue pointer to an array of pname:clearValueCount valid sname:VkClearValue
unions unions
* [[VUID-VkRenderPassBeginInfo-renderPass-00904]] * [[VUID-VkRenderPassBeginInfo-renderPass-00904]]

View File

@ -95,7 +95,7 @@ endif::editing-notes[]
pname:size must: be greater than `0` pname:size must: be greater than `0`
* [[VUID-VkBufferCreateInfo-sharingMode-00913]] * [[VUID-VkBufferCreateInfo-sharingMode-00913]]
If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:pQueueFamilyIndices must: be a pointer to an array of pname:pQueueFamilyIndices must: be a valid pointer to an array of
pname:queueFamilyIndexCount basetype:uint32_t values pname:queueFamilyIndexCount basetype:uint32_t values
* [[VUID-VkBufferCreateInfo-sharingMode-00914]] * [[VUID-VkBufferCreateInfo-sharingMode-00914]]
If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
@ -602,7 +602,7 @@ endif::VK_KHR_maintenance2[]
values passed to the corresponding parameters. values passed to the corresponding parameters.
* [[VUID-VkImageCreateInfo-sharingMode-00941]] * [[VUID-VkImageCreateInfo-sharingMode-00941]]
If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:pQueueFamilyIndices must: be a pointer to an array of pname:pQueueFamilyIndices must: be a valid pointer to an array of
pname:queueFamilyIndexCount basetype:uint32_t values pname:queueFamilyIndexCount basetype:uint32_t values
* [[VUID-VkImageCreateInfo-sharingMode-00942]] * [[VUID-VkImageCreateInfo-sharingMode-00942]]
If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT, If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,

View File

@ -607,8 +607,8 @@ replace the current state for the viewport index [eq]#pname:firstViewport
If the <<features-features-multiViewport,multiple viewports>> feature is If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled, pname:viewportCount must: be `1` not enabled, pname:viewportCount must: be `1`
* [[VUID-vkCmdSetViewport-pViewports-01226]] * [[VUID-vkCmdSetViewport-pViewports-01226]]
pname:pViewports must: be a pointer to an array of pname:viewportCount pname:pViewports must: be a valid pointer to an array of
valid sname:VkViewport structures pname:viewportCount valid sname:VkViewport structures
**** ****
include::../validity/protos/vkCmdSetViewport.txt[] include::../validity/protos/vkCmdSetViewport.txt[]

View File

@ -348,9 +348,9 @@ class ValidityOutputGenerator(OutputGenerator):
if (lengths[0]) == 'null-terminated': if (lengths[0]) == 'null-terminated':
asciidoc += 'a null-terminated ' asciidoc += 'a null-terminated '
elif (lengths[0]) == '1': elif (lengths[0]) == '1':
asciidoc += 'a pointer to ' asciidoc += 'a valid pointer to '
else: else:
asciidoc += 'a pointer to an array of ' asciidoc += 'a valid pointer to an array of '
# Handle equations, which are currently denoted with latex # Handle equations, which are currently denoted with latex
if 'latexmath:' in lengths[0]: if 'latexmath:' in lengths[0]:
@ -363,9 +363,9 @@ class ValidityOutputGenerator(OutputGenerator):
if (length) == 'null-terminated': # This should always be the last thing. If it ever isn't for some bizarre reason, then this will need some massaging. if (length) == 'null-terminated': # This should always be the last thing. If it ever isn't for some bizarre reason, then this will need some massaging.
asciidoc += 'null-terminated ' asciidoc += 'null-terminated '
elif (length) == '1': elif (length) == '1':
asciidoc += 'pointers to ' asciidoc += 'valid pointers to '
else: else:
asciidoc += 'pointers to arrays of ' asciidoc += 'valid pointers to arrays of '
# Handle equations, which are currently denoted with latex # Handle equations, which are currently denoted with latex
if 'latexmath:' in length: if 'latexmath:' in length:
asciidoc += length asciidoc += length
@ -416,7 +416,7 @@ class ValidityOutputGenerator(OutputGenerator):
# Could be multi-level pointers (e.g. ppData - pointer to a pointer). Handle that. # Could be multi-level pointers (e.g. ppData - pointer to a pointer). Handle that.
asciidoc += 'a ' asciidoc += 'a '
for i in range(0, pointercount): for i in range(0, pointercount):
asciidoc += 'pointer to a ' asciidoc += 'valid pointer to a '
# Handle void* and pointers to it # Handle void* and pointers to it
if paramtype.text == 'void': if paramtype.text == 'void':