| // Copyright 2019-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| // Common Valid Usage |
| // Common to acceleration structure build commands |
| * [[VUID-{refpage}-mode-04628]] |
| The pname:mode member of each element of pname:pInfos must: be a valid |
| elink:VkBuildAccelerationStructureModeKHR value |
| * [[VUID-{refpage}-srcAccelerationStructure-04629]] |
| If the pname:srcAccelerationStructure member of any element of |
| pname:pInfos is not dlink:VK_NULL_HANDLE, the |
| pname:srcAccelerationStructure member must: be a valid |
| slink:VkAccelerationStructureKHR handle |
| * [[VUID-{refpage}-pInfos-04630]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its |
| pname:srcAccelerationStructure member must: not be dlink:VK_NULL_HANDLE |
| * [[VUID-{refpage}-pInfos-03403]] |
| The pname:srcAccelerationStructure member of any element of pname:pInfos |
| must: not be the same acceleration structure as the |
| pname:dstAccelerationStructure member of any other element of |
| pname:pInfos |
| * [[VUID-{refpage}-dstAccelerationStructure-03698]] |
| The pname:dstAccelerationStructure member of any element of pname:pInfos |
| must: not be the same acceleration structure as the |
| pname:dstAccelerationStructure member of any other element of |
| pname:pInfos |
| * [[VUID-{refpage}-dstAccelerationStructure-03800]] |
| The pname:dstAccelerationStructure member of any element of pname:pInfos |
| must: be a valid slink:VkAccelerationStructureKHR handle |
| * [[VUID-{refpage}-pInfos-03699]] |
| For each element of pname:pInfos, if its pname:type member is |
| ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, its |
| pname:dstAccelerationStructure member must: have been created with a |
| value of slink:VkAccelerationStructureCreateInfoKHR::pname:type equal to |
| either ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or |
| ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR |
| * [[VUID-{refpage}-pInfos-03700]] |
| For each element of pname:pInfos, if its pname:type member is |
| ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, its |
| pname:dstAccelerationStructure member must: have been created with a |
| value of slink:VkAccelerationStructureCreateInfoKHR::pname:type equal to |
| either ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR or |
| ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR |
| * [[VUID-{refpage}-pInfos-03663]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, |
| <<acceleration-structure-inactive-prims,inactive primitives>> in its |
| pname:srcAccelerationStructure member must: not be made active |
| * [[VUID-{refpage}-pInfos-03664]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, active primitives |
| in its pname:srcAccelerationStructure member must: not be made |
| <<acceleration-structure-inactive-prims,inactive>> |
| * [[VUID-{refpage}-None-03407]] |
| The pname:dstAccelerationStructure member of any element of pname:pInfos |
| must: not be referenced by the pname:geometry.instances.data member of |
| any element of pname:pGeometries or pname:ppGeometries with a |
| pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR in any other |
| element of pname:pInfos |
| * [[VUID-{refpage}-dstAccelerationStructure-03701]] |
| The range of memory backing the pname:dstAccelerationStructure member of |
| any element of pname:pInfos that is accessed by this command must: not |
| overlap the memory backing the pname:srcAccelerationStructure member of |
| any other element of pname:pInfos with a pname:mode equal to |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, which is accessed |
| by this command |
| * [[VUID-{refpage}-dstAccelerationStructure-03702]] |
| The range of memory backing the pname:dstAccelerationStructure member of |
| any element of pname:pInfos that is accessed by this command must: not |
| overlap the memory backing the pname:dstAccelerationStructure member of |
| any other element of pname:pInfos, which is accessed by this command |
| * [[VUID-{refpage}-dstAccelerationStructure-03703]] |
| The range of memory backing the pname:dstAccelerationStructure member of |
| any element of pname:pInfos that is accessed by this command must: not |
| overlap the memory backing the pname:scratchData member of any element |
| of pname:pInfos (including the same element), which is accessed by this |
| command |
| * [[VUID-{refpage}-scratchData-03704]] |
| The range of memory backing the pname:scratchData member of any element |
| of pname:pInfos that is accessed by this command must: not overlap the |
| memory backing the pname:scratchData member of any other element of |
| pname:pInfos, which is accessed by this command |
| * [[VUID-{refpage}-scratchData-03705]] |
| The range of memory backing the pname:scratchData member of any element |
| of pname:pInfos that is accessed by this command must: not overlap the |
| memory backing the pname:srcAccelerationStructure member of any element |
| of pname:pInfos with a pname:mode equal to |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR (including the |
| same element), which is accessed by this command |
| * [[VUID-{refpage}-dstAccelerationStructure-03706]] |
| The range of memory backing the pname:dstAccelerationStructure member of |
| any element of pname:pInfos that is accessed by this command must: not |
| overlap the memory backing any acceleration structure referenced by the |
| pname:geometry.instances.data member of any element of pname:pGeometries |
| or pname:ppGeometries with a pname:geometryType of |
| ename:VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of |
| pname:pInfos, which is accessed by this command |
| * [[VUID-{refpage}-pInfos-03667]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its |
| pname:srcAccelerationStructure member must: have previously been |
| constructed with |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR set in |
| slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:flags in the |
| build |
| * [[VUID-{refpage}-pInfos-03668]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its |
| pname:srcAccelerationStructure and pname:dstAccelerationStructure |
| members must: either be the same slink:VkAccelerationStructureKHR, or |
| not have any <<resources-memory-aliasing, memory aliasing>> |
| * [[VUID-{refpage}-pInfos-03758]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its |
| pname:geometryCount member must: have the same value which was specified |
| when pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03759]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its pname:flags |
| member must: have the same value which was specified when |
| pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03760]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its pname:type |
| member must: have the same value which was specified when |
| pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03761]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, its pname:geometryType |
| member must: have the same value which was specified when |
| pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03762]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, its pname:flags member |
| must: have the same value which was specified when |
| pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03763]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, if pname:geometryType |
| is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its |
| pname:geometry.triangles.vertexFormat member must: have the same value |
| which was specified when pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03764]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, if pname:geometryType |
| is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its |
| pname:geometry.triangles.maxVertex member must: have the same value |
| which was specified when pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03765]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, if pname:geometryType |
| is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, its |
| pname:geometry.triangles.indexType member must: have the same value |
| which was specified when pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03766]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, if pname:geometryType |
| is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its |
| pname:geometry.triangles.transformData address was `NULL` when |
| pname:srcAccelerationStructure was last built, then it must: be `NULL` |
| * [[VUID-{refpage}-pInfos-03767]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, if pname:geometryType |
| is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its |
| pname:geometry.triangles.transformData address was not `NULL` when |
| pname:srcAccelerationStructure was last built, then it must: not be |
| `NULL` |
| * [[VUID-{refpage}-pInfos-03768]] |
| For each element of pname:pInfos, if its pname:mode member is |
| ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each |
| sname:VkAccelerationStructureGeometryKHR structure referred to by its |
| pname:pGeometries or pname:ppGeometries members, if pname:geometryType |
| is ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, and |
| pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR, |
| then the value of each index referenced must: be the same as the |
| corresponding index value when pname:srcAccelerationStructure was last |
| built |
| * [[VUID-{refpage}-primitiveCount-03769]] |
| For each sname:VkAccelerationStructureBuildRangeInfoKHR referenced by |
| this command, its pname:primitiveCount member must: have the same value |
| which was specified when pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-firstVertex-03770]] |
| For each sname:VkAccelerationStructureBuildRangeInfoKHR referenced by |
| this command, if the corresponding geometry uses indices, its |
| pname:firstVertex member must: have the same value which was specified |
| when pname:srcAccelerationStructure was last built |
| * [[VUID-{refpage}-pInfos-03801]] |
| For each element of pname:pInfos[i].pname:pGeometries or |
| pname:pInfos[i].pname:ppGeometries with a pname:geometryType of |
| ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, the corresponding |
| {maxinstancecheck} must: be less than or equal to |
| slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:maxInstanceCount |
| // Common Valid Usage |