diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..f7ea499e --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,98 @@ +# Gitlab CI file for vulkan spec and header generation + +# Build the vulkan specification and generate any associated files (such as vulkan.h) +spec-generate: + stage: build + before_script: + - apt-get update -qq + - apt-get install -y -qq gcc git python3 ruby + - apt-get install -y -qq cmake bison flex libffi-dev libxml2-dev libgdk-pixbuf2.0-dev libcairo2-dev libpango1.0-dev ttf-lyx + - gem install asciidoctor asciidoctor-mathematical coderay json-schema + script: + - ./makeAllExts -j${nproc} -Otarget html styleguide registry manhtml manhtmlpages checkinc checklinks validusage + artifacts: + paths: + - include/ + - src/ + - out/ + expire_in: 1 month + +# Generate the vulkan C++ header (vulkan.hpp) +hpp-generate: + stage: build + image: ubuntu:16.04 + before_script: + - SPEC_DIR="${PWD}" + - apt-get update -qq + - apt-get install -y -qq cmake git g++ + - cd /tmp + - rm -rf Vulkan-Hpp + - git clone https://github.com/KhronosGroup/Vulkan-Hpp.git + - cd Vulkan-Hpp + - git submodule update --init --recursive -- tinyxml2 + - rm -rf Vulkan-Docs + - cp -r "${SPEC_DIR}" Vulkan-Docs + script: + - cd /tmp/Vulkan-Hpp + - cmake -H. -Bbuild + - make -C build + - cd build + - ./VulkanHppGenerator + after_script: + - mkdir -p Vulkan-Hpp/vulkan/ + - cp /tmp/Vulkan-Hpp/vulkan/vulkan.hpp Vulkan-Hpp/vulkan/ + artifacts: + paths: + - Vulkan-Hpp/vulkan/ + expire_in: 1 month + allow_failure: true + +# Compile a simple test program that uses vulkan.h +h-compile: + stage: test + dependencies: + - spec-generate + before_script: + - apt-get update -qq + - apt-get install -y -qq gcc clang + - echo "#include " > /tmp/htest.c + - echo "int main()" >> /tmp/htest.c + - echo "{" >> /tmp/htest.c + - echo " const VkInstanceCreateInfo instance_info = {" >> /tmp/htest.c + - echo " .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO," >> /tmp/htest.c + - echo " .pNext = NULL," >> /tmp/htest.c + - echo " .flags = 0," >> /tmp/htest.c + - echo " .pApplicationInfo = NULL," >> /tmp/htest.c + - echo " .enabledLayerCount = 0," >> /tmp/htest.c + - echo " .ppEnabledLayerNames = NULL," >> /tmp/htest.c + - echo " .enabledExtensionCount = 0," >> /tmp/htest.c + - echo " .ppEnabledExtensionNames = NULL," >> /tmp/htest.c + - echo " };" >> /tmp/htest.c + - echo " VkInstance instance;" >> /tmp/htest.c + - echo " vkCreateInstance(&instance_info, NULL, &instance);" >> /tmp/htest.c + - echo " vkDestroyInstance(instance, NULL);" >>/tmp/htest.c + - echo "}" >> /tmp/htest.c + script: + - gcc -c -std=c11 -Iinclude -Wall -Wextra -Werror /tmp/htest.c + - clang -c -std=c11 -Iinclude -Wall -Wextra -Werror /tmp/htest.c + +# Compile a simple test program that uses vulkan.hpp +hpp-compile: + stage: test + dependencies: + - spec-generate + - hpp-generate + before_script: + - apt-get update -qq + - apt-get install -y -qq g++ clang + - echo "#include " > /tmp/hpptest.cpp + - echo "int main()" >> /tmp/hpptest.cpp + - echo "{" >> /tmp/hpptest.cpp + - echo " auto const instance_info = vk::InstanceCreateInfo();" >> /tmp/hpptest.cpp + - echo " vk::Instance instance;" >> /tmp/hpptest.cpp + - echo " vk::createInstance(&instance_info, nullptr, &instance);" >> /tmp/hpptest.cpp + - echo "}" >> /tmp/hpptest.cpp + script: + - g++ -c -std=c++11 -Iinclude -IVulkan-Hpp -Wall -Wextra -Werror /tmp/hpptest.cpp + - clang++ -c -std=c++11 -Iinclude -IVulkan-Hpp -Wall -Wextra -Werror /tmp/hpptest.cpp + allow_failure: true diff --git a/Makefile b/Makefile index 23d841a6..6c8729e2 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,7 @@ VERBOSE = # $(EXTENSIONS)) # ADOCOPTS options for asciidoc->HTML5 output NOTEOPTS = -a editing-notes -a implementation-guide -PATCHVERSION = 74 +PATCHVERSION = 75 ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS))) SPECREVISION = 1.1.$(PATCHVERSION) else diff --git a/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt b/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt index 35e7b8c2..a44cd9b4 100644 --- a/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt +++ b/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt @@ -1,5 +1,7 @@ include::meta/VK_ANDROID_external_memory_android_hardware_buffer.txt[] +*Status*:: + Draft *Last Modified Date*:: 2018-03-04 *IP Status*:: @@ -14,19 +16,19 @@ include::meta/VK_ANDROID_external_memory_android_hardware_buffer.txt[] - Matthew Netsch, Qualcomm - Andrew Garrard, Samsung -This extension enables an application to import Android code:AHardwareBuffer +This extension enables an application to import Android AHardwareBuffer objects created outside of the Vulkan device into Vulkan memory objects, where they can be bound to images and buffers. -It also allows exporting an code:AHardwareBuffer from a Vulkan memory object +It also allows exporting an +AHardwareBuffer+ from a Vulkan memory object for symmetry with other operating systems. -But since not all code:AHardwareBuffer usages and formats have Vulkan +But since not all +AHardwareBuffer+ usages and formats have Vulkan equivalents, exporting from Vulkan provides strictly less functionality than -creating the code:AHardwareBuffer externally and importing it. +creating the +AHardwareBuffer+ externally and importing it. -Some code:AHardwareBuffer images have implementation-defined _external -formats_ that may not correspond to Vulkan formats. +Some AHardwareBuffer images have implementation-defined _external formats_ +that may not correspond to Vulkan formats. Sampler Y'C~b~C~r~ conversion can be used to sample from these images and -convert them to a known color space. +convert them to a known colorspace. === New Object Types diff --git a/appendices/spirvenv.txt b/appendices/spirvenv.txt index 66893cef..9ec368a4 100644 --- a/appendices/spirvenv.txt +++ b/appendices/spirvenv.txt @@ -392,9 +392,11 @@ endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[] type for the "`Sampled Type`". (code:RelaxedPrecision can: be applied to a sampling instruction and to the variable holding the result of a sampling instruction.) - ** code:OpSampledImage, code:OpImageQuerySizeLod, and - code:OpImageQueryLevels must: only consume an "`Image`" operand whose - type has its "`Sampled`" operand set to 1. + ** code:OpTypeImage must: have a "`Sampled`" operand of 1 (sampled image) + or 2 (storage image). + ** code:OpImageQuerySizeLod, and code:OpImageQueryLevels must: only + consume an "`Image`" operand whose type has its "`Sampled`" operand set + to 1. ** The [eq]#(u,v)# coordinates used for a code:SubpassData must: be the of a constant vector [eq]#(0,0)#, or if a layer coordinate is used, must: be a vector that was formed with constant 0 for the [eq]#u# diff --git a/chapters/clears.txt b/chapters/clears.txt index 8d6d44bd..61c23741 100644 --- a/chapters/clears.txt +++ b/chapters/clears.txt @@ -48,15 +48,29 @@ pname:pColor. .Valid Usage **** +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] * [[VUID-vkCmdClearColorImage-image-00001]] pname:image must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively endif::VK_VERSION_1_1,VK_KHR_maintenance1[] +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdClearColorImage-image-01935]] + pname:image must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdClearColorImage-image-00002]] pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag @@ -152,15 +166,29 @@ include::../api/protos/vkCmdClearDepthStencilImage.txt[] .Valid Usage **** +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] * [[VUID-vkCmdClearDepthStencilImage-image-00008]] pname:image must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively endif::VK_VERSION_1_1,VK_KHR_maintenance1[] +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdClearDepthStencilImage-image-01936]] + pname:image must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdClearDepthStencilImage-image-00009]] pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag diff --git a/chapters/cmdbuffers.txt b/chapters/cmdbuffers.txt index 68d0decc..acc7c4c8 100644 --- a/chapters/cmdbuffers.txt +++ b/chapters/cmdbuffers.txt @@ -158,12 +158,21 @@ To create a command pool, call: include::../api/protos/vkCreateCommandPool.txt[] * pname:device is the logical device that creates the command pool. - * pname:pCreateInfo contains information used to create the command pool. + * pname:pCreateInfo is a pointer to an instance of the + slink:VkCommandPoolCreateInfo structure specifying the state of the + command pool object. * pname:pAllocator controls host memory allocation as described in the <> chapter. * pname:pCommandPool points to a sname:VkCommandPool handle in which the created pool is returned. +.Valid Usage +**** + * [[VUID-vkCreateCommandPool-queueFamilyIndex-01937]] + sname:pCreateInfo::pname:queueFamilyIndex must: be the index of a queue + family available in the logical device pname:device. +**** + include::../validity/protos/vkCreateCommandPool.txt[] -- @@ -183,13 +192,6 @@ include::../api/structs/VkCommandPoolCreateInfo.txt[] All command buffers allocated from this command pool must: be submitted on queues from the same queue family. -.Valid Usage -**** - * [[VUID-VkCommandPoolCreateInfo-queueFamilyIndex-00039]] - pname:queueFamilyIndex must: be the index of a queue family available in - the calling command's pname:device parameter -**** - include::../validity/structs/VkCommandPoolCreateInfo.txt[] -- diff --git a/chapters/copies.txt b/chapters/copies.txt index c1986f6e..bca76515 100644 --- a/chapters/copies.txt +++ b/chapters/copies.txt @@ -47,16 +47,26 @@ endif::VK_KHR_shared_presentable_image[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] * Source images must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - flink:vkGetPhysicalDeviceFormatProperties. +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by +endif::VK_ANDROID_external_memory_android_hardware_buffer[] + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively * Destination images must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - flink:vkGetPhysicalDeviceFormatProperties. +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by +endif::VK_ANDROID_external_memory_android_hardware_buffer[] + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively endif::VK_VERSION_1_1,VK_KHR_maintenance1[] * Source images must: have been created with the ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage bit enabled and destination @@ -335,15 +345,29 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] The union of all source regions, and the union of all destination regions, specified by the elements of pname:pRegions, must: not overlap in memory +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] * [[VUID-vkCmdCopyImage-srcImage-00125]] pname:srcImage must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - flink:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively endif::VK_VERSION_1_1,VK_KHR_maintenance1[] +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdCopyImage-srcImage-01938]] + pname:srcImage must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdCopyImage-srcImage-00126]] pname:srcImage must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag @@ -374,15 +398,29 @@ ifdef::VK_KHR_shared_presentable_image[] ename:VK_IMAGE_LAYOUT_GENERAL, or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR endif::VK_KHR_shared_presentable_image[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] * [[VUID-vkCmdCopyImage-dstImage-00130]] pname:dstImage must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - flink:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively endif::VK_VERSION_1_1,VK_KHR_maintenance1[] +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdCopyImage-dstImage-01939]] + pname:dstImage must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdCopyImage-dstImage-00131]] pname:dstImage must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag @@ -723,7 +761,7 @@ ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] // The nested ifdefs are there in anticipation of the hoped-for day when the // VU extractor and validation layers can handle VU with imbedded -// conditionals. +// conditionals. They are commented out until then. ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-VkImageCopy-srcImage-01727]] If the calling command's pname:srcImage is a compressed image, @@ -886,15 +924,29 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-vkCmdCopyBufferToImage-srcBuffer-00174]] pname:srcBuffer must: have been created with ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] * [[VUID-vkCmdCopyBufferToImage-dstImage-00175]] pname:dstImage must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - flink:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively endif::VK_VERSION_1_1,VK_KHR_maintenance1[] +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdCopyBufferToImage-dstImage-01940]] + pname:dstImage must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdCopyBufferToImage-srcBuffer-00176]] If pname:srcBuffer is non-sparse then it must: be bound completely and contiguously to a single sname:VkDeviceMemory object @@ -944,10 +996,10 @@ endif::VK_VERSION_1_1[] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:dstImage was created * [[VUID-vkCmdCopyBufferToImage-imageOffset-01793]] - The pname:imageOffset and pname:imageExtent members of each element - of pname:pRegions must: respect the image transfer granularity - requirements of pname:commandBuffer's command pool's queue family, as - described in slink:VkQueueFamilyProperties + The pname:imageOffset and pname:imageExtent members of each element of + pname:pRegions must: respect the image transfer granularity requirements + of pname:commandBuffer's command pool's queue family, as described in + slink:VkQueueFamilyProperties **** include::../validity/protos/vkCmdCopyBufferToImage.txt[] @@ -1010,15 +1062,29 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] The union of all source regions, and the union of all destination regions, specified by the elements of pname:pRegions, must: not overlap in memory +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] * [[VUID-vkCmdCopyImageToBuffer-srcImage-00185]] pname:srcImage must: use a format that supports ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - flink:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively endif::VK_VERSION_1_1,VK_KHR_maintenance1[] +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdCopyImageToBuffer-srcImage-01941]] + pname:srcImage must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdCopyImageToBuffer-srcImage-00186]] pname:srcImage must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag @@ -1070,10 +1136,10 @@ endif::VK_VERSION_1_1[] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when pname:srcImage was created * [[VUID-vkCmdCopyImageToBuffer-imageOffset-01794]] - The pname:imageOffset and pname:imageExtent members of each element - of pname:pRegions must: respect the image transfer granularity - requirements of pname:commandBuffer's command pool's queue family, as - described in slink:VkQueueFamilyProperties + The pname:imageOffset and pname:imageExtent members of each element of + pname:pRegions must: respect the image transfer granularity requirements + of pname:commandBuffer's command pool's queue family, as described in + slink:VkQueueFamilyProperties **** include::../validity/protos/vkCmdCopyImageToBuffer.txt[] @@ -1242,7 +1308,7 @@ ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] // The nested ifdefs are there in anticipation of the hoped-for day when the // VU extractor and validation layers can handle VU with imbedded -// conditionals. +// conditionals. They are commented out until then. ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-VkBufferImageCopy-None-01735]] If the calling command's sname:VkImage parameter is a compressed image, @@ -1530,13 +1596,27 @@ representable range of the destination format, then casting the value. The union of all destination regions, specified by the elements of pname:pRegions, must: not overlap in memory with any texel that may: be sampled during the blit operation +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdBlitImage-srcImage-00218]] pname:srcImage must: use a format that supports ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdBlitImage-srcImage-01942]] + pname:srcImage must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-vkCmdBlitImage-srcImage-01561]] pname:srcImage must: not use a format listed in @@ -1563,13 +1643,27 @@ ifdef::VK_KHR_shared_presentable_image[] ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or ename:VK_IMAGE_LAYOUT_GENERAL endif::VK_KHR_shared_presentable_image[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdBlitImage-dstImage-00223]] pname:dstImage must: use a format that supports ename:VK_FORMAT_FEATURE_BLIT_DST_BIT, which is indicated by - sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled - images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for - optimally tiled images) - as returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdBlitImage-dstImage-01943]] + pname:dstImage must: use a format that supports + ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT, which is indicated by + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-vkCmdBlitImage-dstImage-01562]] pname:dstImage must: not use a format listed in @@ -1619,26 +1713,56 @@ endif::VK_KHR_shared_presentable_image[] * [[VUID-vkCmdBlitImage-dstImage-00234]] pname:dstImage must: have been created with a pname:samples value of ename:VK_SAMPLE_COUNT_1_BIT +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdBlitImage-filter-00235]] If pname:filter is ename:VK_FILTER_LINEAR, pname:srcImage must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdBlitImage-filter-01944]] + If pname:filter is ename:VK_FILTER_LINEAR, pname:srcImage must: be of a + format which supports linear filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_IMG_filter_cubic[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdBlitImage-filter-00236]] If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdBlitImage-filter-01945]] + If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: be of + a format which supports cubic filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdBlitImage-filter-00237]] If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: have - a elink:VkImageType of ename:VK_IMAGE_TYPE_3D + a elink:VkImageType of ename:VK_IMAGE_TYPE_2D endif::VK_IMG_filter_cubic[] ifdef::VK_VERSION_1_1[] * [[VUID-vkCmdBlitImage-commandBuffer-01834]] diff --git a/chapters/descriptorsets.txt b/chapters/descriptorsets.txt index 8e7e556d..71d052c5 100644 --- a/chapters/descriptorsets.txt +++ b/chapters/descriptorsets.txt @@ -1156,8 +1156,8 @@ ifndef::VK_EXT_descriptor_indexing[] * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01678]] The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader - stages and across all elements of pname:pSetLayouts must: be less - than or equal to + stages and across all elements of pname:pSetLayouts must: be less than + or equal to sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01679]] The total number of descriptors of the type @@ -1316,8 +1316,8 @@ ifdef::VK_EXT_descriptor_indexing[] ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT bit set with a pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader - stages and across all elements of pname:pSetLayouts must: be less - than or equal to + stages and across all elements of pname:pSetLayouts must: be less than + or equal to sname:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03030]] The total number of descriptors in descriptor set layouts created @@ -1386,8 +1386,8 @@ ifdef::VK_EXT_descriptor_indexing[] * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037]] The total number of descriptors of the type ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader - stages and across all elements of pname:pSetLayouts must: be less - than or equal to + stages and across all elements of pname:pSetLayouts must: be less than + or equal to sname:VkPhysicalDeviceDescriptorIndexingPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindUniformBuffers * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038]] The total number of descriptors of the type @@ -2351,6 +2351,31 @@ bindings as needed to update all pname:descriptorCount descriptors. ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView and pname:imageLayout members of each element of pname:pImageInfo must: be a valid sname:VkImageView and elink:VkImageLayout, respectively +ifdef::VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[] + * [[VUID-VkWriteDescriptorSet-descriptorType-01946]] + If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, then + the pname:imageView member of each pname:pImageInfo element must: have + been created without a sname:VkSamplerYcbcrConversionInfo structure in + its pname:pNext chain + * [[VUID-VkWriteDescriptorSet-descriptorType-01947]] + If pname:descriptorType is + ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and if any element of + pname:pImageInfo has a pname:imageView member that was created with a + sname:VkSamplerYcbcrConversionInfo structure in its pname:pNext chain, + then pname:dstSet must: have been allocated with a layout that included + immutable samplers for pname:dstBinding + * [[VUID-VkWriteDescriptorSet-descriptorType-01948]] + If pname:descriptorType is + ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was + allocated with a layout that included immutable samplers for + pname:dstBinding, then the pname:imageView member of each element of + pname:pImageInfo which corresponds to a immutable sampler that enables + <> must: have + been created with a sname:VkSamplerYcbcrConversionInfo structure in its + pname:pNext chain with an _identically defined_ + sname:VkSamplerYcbcrConversionInfo to the corresponding immutable + sampler +endif::VULKAN_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-VkWriteDescriptorSet-descriptorType-01402]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, for each descriptor that will be accessed via load or store operations the @@ -2589,30 +2614,8 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[] subresource accessible from pname:imageView at the time this descriptor is accessed ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] - * [[VUID-VkDescriptorImageInfo-sampler-01563]] - If pname:sampler is used and enables <>: - ** The pname:format of the pname:imageView must: be the same as the - elink:VkFormat of the image - ** The pname:aspectMask of the pname:imageView must: be - ename:VK_IMAGE_ASPECT_COLOR_BIT - ** The pname:components.a of the pname:imageView must: be - ename:VK_COMPONENT_SWIZZLE_IDENTITY - ** The pname:components.r of the pname:imageView must: be - ename:VK_COMPONENT_SWIZZLE_IDENTITY - ** The pname:components.g of the pname:imageView must: be - ename:VK_COMPONENT_SWIZZLE_IDENTITY - ** The pname:components.b of the pname:imageView must: be - ename:VK_COMPONENT_SWIZZLE_IDENTITY - ** The pname:pNext chain of the pname:imageView must: contain a - sname:VkSamplerYcbcrConversionInfo which has a pname:conversion which - is an _identically defined object_ to the pname:conversion of the - sname:VkSamplerYcbcrConversionInfo which is in the pname:pNext chain - of the pname:sampler * [[VUID-VkDescriptorImageInfo-sampler-01564]] - If pname:sampler is used and does not enable - <> and the - elink:VkFormat of the image is a + If pname:sampler is used and the elink:VkFormat of the image is a <>, the image must: have been created with ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, and the pname:aspectMask of @@ -3229,8 +3232,8 @@ endif::VK_EXT_descriptor_indexing[] Thus, the contents of a descriptor set binding must: not be altered (overwritten by an update command, or freed) between the first point in time -that it may: be consumed, and when the command completes executing on -the queue. +that it may: be consumed, and when the command completes executing on the +queue. The contents of pname:pDynamicOffsets are consumed immediately during execution of fname:vkCmdBindDescriptorSets. diff --git a/chapters/dispatch.txt b/chapters/dispatch.txt index aa080054..878f3057 100644 --- a/chapters/dispatch.txt +++ b/chapters/dispatch.txt @@ -99,25 +99,57 @@ is assembled. object bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDispatch-linearTilingFeatures-00398]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDispatch-formatFeatures-01949]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_IMG_filter_cubic[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDispatch-linearTilingFeatures-00399]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDispatch-formatFeatures-01950]] + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a + result of this command must: be of a format which supports cubic + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDispatch-None-00400]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: not have a elink:VkImageViewType of @@ -235,25 +267,57 @@ at pname:offset. object bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDispatchIndirect-linearTilingFeatures-00414]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDispatchIndirect-formatFeatures-01951]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_IMG_filter_cubic[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDispatchIndirect-linearTilingFeatures-00415]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDispatchIndirect-formatFeatures-01952]] + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a + result of this command must: be of a format which supports cubic + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDispatchIndirect-None-00416]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: not have a elink:VkImageViewType of diff --git a/chapters/drawing.txt b/chapters/drawing.txt index f6db164c..b3b2aca1 100644 --- a/chapters/drawing.txt +++ b/chapters/drawing.txt @@ -591,28 +591,60 @@ The assembled primitives execute the bound graphics pipeline. object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDraw-linearTilingFeatures-00450]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDraw-formatFeatures-01953]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDraw-None-01499]] Image subresources used as attachments in the current render pass must: not be accessed in any way other than as an attachment by this command. ifdef::VK_IMG_filter_cubic[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDraw-linearTilingFeatures-00451]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDraw-formatFeatures-01954]] + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a + result of this command must: be of a format which supports cubic + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDraw-None-00452]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: not have a elink:VkImageViewType of @@ -785,28 +817,60 @@ The assembled primitives execute the bound graphics pipeline. object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexed-linearTilingFeatures-00470]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndexed-formatFeatures-01955]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexed-None-01500]] Image subresources used as attachments in the current render pass must: not be accessed in any way other than as an attachment by this command. ifdef::VK_IMG_filter_cubic[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexed-linearTilingFeatures-00471]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndexed-formatFeatures-01956]] + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a + result of this command must: be of a format which supports cubic + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexed-None-00472]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: not have a elink:VkImageViewType of @@ -988,28 +1052,60 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored. object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndirect-linearTilingFeatures-00496]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndirect-formatFeatures-01957]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndirect-None-01501]] Image subresources used as attachments in the current render pass must: not be accessed in any way other than as an attachment by this command. ifdef::VK_IMG_filter_cubic[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndirect-linearTilingFeatures-00497]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndirect-formatFeatures-01958]] + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a + result of this command must: be of a format which supports cubic + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndirect-None-00498]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: not have a elink:VkImageViewType of @@ -1236,15 +1332,31 @@ located at pname:countBufferOffset and use this as the draw count. object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndirectCountAMD-linearTilingFeatures-00524]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndirectCountAMD-formatFeatures-01959]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndirectCountAMD-None-01502]] Image subresources used as attachments in the current render pass must: not be accessed in any way other than as an attachment by this command. @@ -1426,28 +1538,60 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored. object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexedIndirect-linearTilingFeatures-00548]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndexedIndirect-formatFeatures-01960]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexedIndirect-None-01503]] Image subresources used as attachments in the current render pass must: not be accessed in any way other than as an attachment by this command. ifdef::VK_IMG_filter_cubic[] +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexedIndirect-linearTilingFeatures-00549]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: be of a format which supports cubic filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndexedIndirect-formatFeatures-01961]] + Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a + result of this command must: be of a format which supports cubic + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexedIndirect-None-00550]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a result of this command must: not have a elink:VkImageViewType of @@ -1682,15 +1826,31 @@ located at pname:countBufferOffset and use this as the draw count. object bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses a storage buffer, it must: not access values outside of the range of that buffer specified in the bound descriptor set +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexedIndirectCountAMD-linearTilingFeatures-00577]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a result of this command must: be of a format which supports linear filtering, as specified by the ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in - sname:VkFormatProperties::pname:linearTilingFeatures (for a linear - image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an - optimally tiled image) returned by - fname:vkGetPhysicalDeviceFormatProperties + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for linearly or optimally + tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-vkCmdDrawIndexedIndirectCountAMD-formatFeatures-01962]] + Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a + result of this command must: be of a format which supports linear + filtering, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in + sname:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + returned by vkGetAndroidHardwareBufferPropertiesANDROID for external + format images, or by + sname:VkFormatProperties::pname:linearTilingFeatures or + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties for non-external format + linearly or optimally tiled images, respectively +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-01504]] Image subresources used as attachments in the current render pass must: not be accessed in any way other than as an attachment by this command. diff --git a/chapters/features.txt b/chapters/features.txt index 1e21f211..f0e9e971 100644 --- a/chapters/features.txt +++ b/chapters/features.txt @@ -6814,7 +6814,7 @@ usages or flags are requested. Requiring at least one GPU usage flag ensures that Android hardware buffer memory will be allocated in a memory pool accessible to the Vulkan implementation, and that specializing the memory layout based on usage flags -does not prevent it from being compatible with Vulkan. +doesn't prevent it from being compatible with Vulkan. Implementations may: avoid unnecessary restrictions caused by this requirement by using vendor usage flags to indicate that only the Vulkan uses indicated in slink:VkImageFormatProperties2 are required. diff --git a/chapters/fragops.txt b/chapters/fragops.txt index c2e52acb..b1453a16 100644 --- a/chapters/fragops.txt +++ b/chapters/fragops.txt @@ -879,7 +879,7 @@ The depth test passes under the following conditions: {geq} z~a~#. * ename:VK_COMPARE_OP_ALWAYS: the test always passes. -If depth clamping (see <>) is +If slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable is enabled, before the incoming fragment's [eq]#pname:z~f~# is compared to [eq]#pname:z~a~#, [eq]#pname:z~f~# is clamped to [eq]#[min(n,f),max(n,f)]#, where [eq]#n# and [eq]#f# are the pname:minDepth and pname:maxDepth depth diff --git a/chapters/fundamentals.txt b/chapters/fundamentals.txt index 49649417..97710f6f 100644 --- a/chapters/fundamentals.txt +++ b/chapters/fundamentals.txt @@ -945,6 +945,20 @@ Extension structures are not described in the base Vulkan Specification, but either in layered Specifications incorporating those extensions, or in separate vendor-provided documents. +As a convenience to implementations and layers needing to iterate through a +structure pointer chain, the Vulkan API provides the following base +structures: + +include::../api/structs/VkBaseInStructure.txt[] + +include::../api/structs/VkBaseOutStructure.txt[] + +sname:VkBaseInStructure can be used to facilitate iterating through a +read-only structure pointer chain. +sname:VkBaseOutStructure can be used to facilitate iterating through a +structure pointer chain that returns data back to the application. +These structures allow for some type safety and can be used by Vulkan API +functions that operate on generic inputs and outputs. [[fundamentals-validusage-nested-structs]] ==== Valid Usage for Nested Structures diff --git a/chapters/interfaces.txt b/chapters/interfaces.txt index cbc9d423..53facf9b 100644 --- a/chapters/interfaces.txt +++ b/chapters/interfaces.txt @@ -496,9 +496,7 @@ sname:VkDescriptorSetLayout objects in the pipeline layout as described in Variables identified with the code:UniformConstant storage class are used only as handles to refer to opaque resources. Such variables must: be typed as code:OpTypeImage, code:OpTypeSampler, -code:OpTypeSampledImage, or arrays of only these types. -Variables of type code:OpTypeImage must: have a code:Sampled operand of 1 -(sampled image) or 2 (storage image). +code:OpTypeSampledImage, or an array of one of these types. The code:Sampled code:Type of an code:OpTypeImage declaration must: match the same basic data type as the corresponding resource, or the values @@ -524,7 +522,7 @@ Variables identified with the code:Uniform storage class are used to access transparent buffer backed resources. Such variables must: be: - * typed as code:OpTypeStruct, or arrays of only this type, + * typed as code:OpTypeStruct, or an array of this type, * identified with a code:Block or code:BufferBlock decoration, and * laid out explicitly using the code:Offset, code:ArrayStride, and code:MatrixStride decorations as specified in @@ -535,7 +533,7 @@ Variables identified with the code:StorageBuffer storage class are used to access transparent buffer backed resources. Such variables must: be: - * typed as code:OpTypeStruct, or arrays of only this type, + * typed as code:OpTypeStruct, or an array of this type, * identified with a code:Block decoration, and * laid out explicitly using the code:Offset, code:ArrayStride, and code:MatrixStride decorations as specified in @@ -630,11 +628,25 @@ ifdef::VK_EXT_descriptor_indexing[] code:StorageBufferArrayNonUniformIndexingEXT endif::VK_EXT_descriptor_indexing[] +ifdef::VK_EXT_descriptor_indexing[] +If an instruction loads from or stores to a resource (including atomics and +image instructions) and the resource descriptor being accessed is not +dynamically uniform, then the corresponding non-uniform indexing feature +must: be enabled and the capability must: be declared. +endif::VK_EXT_descriptor_indexing[] +If an instruction loads from or stores to a resource (including atomics and +image instructions) and the resource descriptor being accessed is not +uniform, then the corresponding dynamic indexing +ifdef::VK_EXT_descriptor_indexing[] +or non-uniform +endif::VK_EXT_descriptor_indexing[] +feature must: be enabled and the capability must: be declared. + ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] - * If sampler Y'C~B~C~R~ conversion is enabled, the combined image sampler - must: be indexed only by constant integral expressions when aggregated - into arrays in shader code, irrespective of the - pname:shaderSampledImageArrayDynamicIndexing feature. +If sampler Y'C~B~C~R~ conversion is enabled, the combined image sampler +must: be indexed only by constant integral expressions when aggregated into +arrays in shader code, irrespective of the +pname:shaderSampledImageArrayDynamicIndexing feature. endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] [[interfaces-resources-correspondence]] @@ -713,8 +725,8 @@ Each descriptor set has its own binding name space. If the code:Binding decoration is used with an array, the entire array is assigned that binding value. -The size of the array declaration must: be no larger than the -pname:descriptorCount of that sname:VkDescriptorSetLayoutBinding. +The array must: be a single-dimensional array and size of the array must: be +no larger than the number of descriptors in the binding. ifdef::VK_EXT_descriptor_indexing[] If the array is runtime-sized, then array elements greater than or equal to the size of that binding in the bound descriptor set must: not be used. @@ -754,10 +766,39 @@ The descriptor set layout binding must: be of a corresponding descriptor type, as defined in <>. -It is valid for multiple shader variables to be assigned the same descriptor -set and binding values, as long as all those that are statically used by the -entry point being compiled are compatible with the descriptor type in the -descriptor set layout binding. +[NOTE] +.Note +==== +There are no limits on the number of shader variables that can have +overlapping set and binding values in a shader; but which resources are +<> has an impact. +If any shader variable identifying a resource is +<> in a shader, then the underlying +descriptor bound at the declared set and binding must +<> when the shader executes. + +If multiple shader variables are declared with the same set and binding +values, and with the same underlying descriptor type, they can all be +statically used within the same shader. +However, accesses are not automatically synchronized, and code:Aliased +decorations should be used to avoid data hazards (see +https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_aliasingsection_a_aliasing[section +2.18.2 Aliasing in the SPIR-V specification]). + +If multiple shader variables with the same set and binding values are +declared in a single shader, but with different declared types, where any of +those are not supported by the relevant bound descriptor, that shader can +only be executed if the variables with the unsupported type are not +statically used. + +A noteworthy example of using multiple statically-used shader variables +sharing the same descriptor set and binding values is a descriptor of type +code:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER that has multiple +corresponding shader variables in the code:UniformConstant storage class, +where some could be code:OpTypeImage, some could be code:OpTypeSampler +(code:Sampled=1), and some could be code:OpTypeSampledImage. +==== [[interfaces-resources-limits]] .Shader Resource Limits diff --git a/chapters/memory.txt b/chapters/memory.txt index 13e73a05..f1e360ae 100644 --- a/chapters/memory.txt +++ b/chapters/memory.txt @@ -1084,7 +1084,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] ** pname:allocationSize must: be the size returned by flink:vkGetAndroidHardwareBufferPropertiesANDROID for the Android hardware buffer - ** If the pname:pNext chain does not contain an instance of + ** If the pname:pNext chain doesn't contain an instance of slink:VkMemoryDedicatedAllocateInfo or pname:VkMemoryDedicatedAllocateInfo::pname:image is dlink:VK_NULL_HANDLE, the Android hardware buffer must: have a format @@ -1933,7 +1933,7 @@ Each call to fname:vkGetMemoryAndroidHardwareBufferANDROID must: return an Android hardware buffer with a new reference acquired in addition to the reference held by the sname:VkDeviceMemory. To avoid leaking resources, the application must: release the reference by -calling code:AHardwareBuffer_release when it is no longer needed. +calling +AHardwareBuffer_release+ when it is no longer needed. When called with the same handle in sname:VkMemoryGetAndroidHardwareBufferInfoANDROID::pname:memory, fname:vkGetMemoryAndroidHardwareBufferANDROID must: return the same Android @@ -2028,7 +2028,7 @@ include::../api/structs/VkAndroidHardwareBufferFormatPropertiesANDROID.txt[] * pname:sType is the type of this structure. * pname:pNext is `NULL` or a pointer to an extension-specific structure. * pname:format is the Vulkan format corresponding to the Android hardware - buffer's format, or ename:VK_FORMAT_UNDEFINED if there is not an + buffer's format, or ename:VK_FORMAT_UNDEFINED if there isn't an equivalent Vulkan format. * pname:externalFormat is an implementation-defined external format identifier for use with slink:VkExternalFormatANDROID. @@ -2060,6 +2060,23 @@ ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, and should: include ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT and ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT. +[NOTE] +.Note +==== +The pname:formatFeatures member only indicates the features available when +using an +> created from the Android hardware buffer. +Images from Android hardware buffers with a format other than +ename:VK_FORMAT_UNDEFINED are subject to the format capabilities obtained +from flink:vkGetPhysicalDeviceFormatProperties2, and +flink:vkGetPhysicalDeviceImageFormatProperties2 with appropriate parameters. +These sets of features are independent of each other, e.g. the external +format will support sampler Y'C~B~C~R~ conversion even if the non-external +format doesn't, and writing to non-external format images is possible but +writing to external format images is not. +==== + Android hardware buffers with the same external format must: have the same support for ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, @@ -2068,6 +2085,7 @@ ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, and ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT. +in pname:formatFeatures. Other format features may: differ between Android hardware buffers that have the same external format. This allows applications to use the same slink:VkSamplerYcbcrConversion @@ -2082,7 +2100,7 @@ If pname:format is ename:VK_FORMAT_UNDEFINED, all members of pname:samplerYcbcrConversionComponents must: be ename:VK_COMPONENT_SWIZZLE_IDENTITY. -Implementations may: not always be able to determine the color model, +Implementations may not always be able to determine the color model, numerical range, or chroma offsets of the image contents, so the values in sname:VkAndroidHardwareBufferFormatPropertiesANDROID are only suggestions. Applications should: treat these values as sensible defaults to use in the @@ -2693,7 +2711,7 @@ A sname:VkDeviceMemory imported from an Android hardware buffer or that can be exported to an Android hardware buffer must: acquire a reference to its code:AHardwareBuffer object, and must: release this reference when the device memory is freed. -During the host execution of a Vulkan command that has an Android hardware +During the host execution of a Vulkan command which has an Android hardware buffer as a parameter (including indirect parameters via pname:pNext chains), the application must: not decrement the Android hardware buffer's reference count to zero. @@ -2724,36 +2742,37 @@ device. Vulkan buffer and image usage flags do not correspond exactly to Android hardware buffer usage flags. When allocating Android hardware buffers with non-Vulkan APIs, if any -code:AHARDWAREBUFFER_USAGE_GPU_* usage bits are included, by default the ++AHARDWAREBUFFER_USAGE_GPU_*+ usage bits are included, by default the allocator must: allocate the memory in such a way that it can support Vulkan usages and creation flags in the <> -which do not have Android hardware buffer equivalents. +which don't have Android hardware buffer equivalents. The slink:VkAndroidHardwareBufferUsageANDROID structure can: be attached to the pname:pNext chain of a slink:VkImageFormatProperties2 instance passed to flink:vkGetPhysicalDeviceImageFormatProperties2 to obtain optimal Android hardware buffer usage flags for specific Vulkan resource creation parameters. -Some usage flags returned by these commands are required: based on the input +Some usage flags returned by these commands are required based on the input parameters, but additional vendor-specific usage flags -(code:AHARDWAREBUFFER_USAGE_VENDOR_*) may: also be returned. +(+AHARDWAREBUFFER_USAGE_VENDOR_*+) may: also be returned. Any Android hardware buffer allocated with these vendor-specific usage flags and imported to Vulkan must: only be bound to resources created with parameters that are a subset of the parameters used to obtain the Android hardware buffer usage, since the memory may: have been allocated in a way incompatible with other parameters. -If an Android hardware buffer is successfully allocated with additional +If a Android hardware buffer is successfully allocated with additional non-vendor-specific usage flags in addition to the recommended usage, it -must: support being used in the same ways as an Android hardware buffer +must: support being used in the same ways as a Android hardware buffer allocated with only the recommended usage, and also in ways indicated by the additional usage. [[memory-external-android-hardware-buffer-external-formats]] ===== Android Hardware Buffer External Formats ===== -Android hardware buffers may: represent images using implementation-specific -formats, layouts, color models, etc., which do not have Vulkan equivalents. +Android hardware buffers can represent images using implementation-specific +formats, layouts, color models, etc. +which don't have Vulkan equivalents. Such _external formats_ are commonly used by external image sources such as video decoders or cameras. Vulkan can: import Android hardware buffers that have external formats, but @@ -2766,7 +2785,7 @@ Images that will be backed by a Android hardware buffer can use an external format by setting sname:VkImageCreateInfo::pname:format to ename:VK_FORMAT_UNDEFINED and including an instance of slink:VkExternalFormatANDROID in the pname:pNext chain. -Images can: be created with an external format even if the Android hardware +Images can be created with an external format even if the Android hardware buffer has a format which has an <> to enable consistent handling of images from sources that might use either @@ -2775,9 +2794,8 @@ However, all images created with an external format are subject to the valid usage requirements associated with external formats, even if the Android hardware buffer's format has a Vulkan equivalent. The external format of an Android hardware buffer can: be obtained by -passing an instance of -slink:VkAndroidHardwareBufferFormatPropertiesANDROID to -flink:vkGetAndroidHardwareBufferPropertiesANDROID. +passing an instance of slink:VkAndroidHardwareBufferFormatPropertiesANDROID +to flink:vkGetAndroidHardwareBufferPropertiesANDROID. [[memory-external-android-hardware-buffer-image-resources]] ===== Android Hardware Buffer Image Resources @@ -2821,7 +2839,7 @@ properties derived from the image: hardware buffer with usage returned in slink:VkAndroidHardwareBufferUsageANDROID. -Implementations may: support fewer combinations of image creation parameters +Implementations may support fewer combinations of image creation parameters for images with Android hardware buffer external handle type than for non-external images. Support for a given set of parameters can be determined by passing @@ -2829,7 +2847,7 @@ slink:VkExternalImageFormatProperties to flink:vkGetPhysicalDeviceImageFormatProperties2 with pname:handleType set to ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID. Any Android hardware buffer successfully allocated outside Vulkan with usage -that includes code:AHARDWAREBUFFER_USAGE_GPU_* must: be supported when using +that includes +AHARDWAREBUFFER_USAGE_GPU_*+ must be supported when using equivalent Vulkan image parameters. If a given choice of image parameters are supported for import, they can: also be used to create an image and memory that will be exported to an @@ -2876,11 +2894,11 @@ endif::VK_VERSION_1_1[] 2:: The code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE flag does not correspond to a Vulkan image usage or creation flag. - Instead, its presence indicates that the Android hardware buffer + Instead, it's presence indicates that the Android hardware buffer contains a complete set of mip levels (sname:VkImageCreateInfo::pname:mipLevels is [eq]#{lceil}log~2~(max(code:width, code:height)){rceil} {plus} 1#), and - its absence indicates that the Android hardware buffer contains only a + it's absence indicates that the Android hardware buffer contains only a single mip level. ifdef::VK_KHR_image_format_list[] @@ -2899,7 +2917,7 @@ endif::VK_KHR_image_format_list[] ===== Android Hardware Buffer Buffer Resources Android hardware buffers with a format of code:AHARDWAREBUFFER_FORMAT_BLOB -and usage that includes code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER can: be +and usage that includes code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER may be used as the backing store for sname:VkBuffer objects. Such Android hardware buffers have a size in bytes specified by their code:width; code:height and code:layers are 1. diff --git a/chapters/pipelines.txt b/chapters/pipelines.txt index 421c7163..6d546aad 100644 --- a/chapters/pipelines.txt +++ b/chapters/pipelines.txt @@ -606,7 +606,7 @@ ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[] endif::VK_VERSION_1_1,VK_KHR_maintenance2[] // The nested ifdefs are there in anticipation of the hoped-for day when the // VU extractor and validation layers can handle VU with imbedded -// conditionals. +// conditionals. They are commented out until then. ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[] * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01756]] If rasterization is not disabled and pname:subpass uses a depth/stencil @@ -850,8 +850,8 @@ include::../api/enums/VkPipelineCreateFlagBits.txt[] ifdef::VK_VERSION_1_1,VK_KHR_device_group[] ifdef::VK_VERSION_1_1,VK_KHR_multiview[] * ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT specifies that - any shader input variables decorated as code:DeviceIndex will be - assigned values as if they were decorated as code:ViewIndex. + any shader input variables decorated as code:ViewIndex will be assigned + values as if they were decorated as code:DeviceIndex. endif::VK_VERSION_1_1,VK_KHR_multiview[] * ename:VK_PIPELINE_CREATE_DISPATCH_BASE specifies that a compute pipeline can: be used with flink:vkCmdDispatchBase with a non-zero base diff --git a/chapters/renderpass.txt b/chapters/renderpass.txt index 7ae73f01..565635bc 100644 --- a/chapters/renderpass.txt +++ b/chapters/renderpass.txt @@ -213,6 +213,13 @@ ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[] pname:pAspectReferences member must: be less than the value of pname:inputAttachmentCount in the member of pname:pSubpasses identified by its pname:subpass member + * [[VUID-VkRenderPassCreateInfo-pNext-01963]] + If the pname:pNext chain includes an instance of + slink:VkRenderPassInputAttachmentAspectCreateInfo, the pname:aspectMask + member of any element of pname:pAspectReferences must: only include + aspects that are present in images of the pname:format of the input + attachment specified by the pname:subpass and pname:inputAttachment of + the same element of pname:pAspectReferences endif::VK_VERSION_1_1,VK_KHR_maintenance2[] ifdef::VK_VERSION_1_1,VK_KHR_multiview[] * [[VUID-VkRenderPassCreateInfo-pNext-01928]] @@ -574,14 +581,8 @@ endif::VK_KHR_maintenance2[] .Valid Usage **** - * [[VUID-VkInputAttachmentAspectReference-pCreateInfo-01568]] - There must: be an input attachment at - pname:pCreateInfo::pname:pSubpasses[pname:subpass].pname:pInputAttachments[pname:inputAttachmentIndex]. - * [[VUID-VkInputAttachmentAspectReference-None-01569]] - The specified input attachment must: have more than one aspect mask. - * [[VUID-VkInputAttachmentAspectReference-aspectMask-01570]] - pname:aspectMask must: be a subset of the aspect masks in the specified - input attachment. + * [[VUID-VkInputAttachmentAspectReference-aspectMask-01964]] + pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT **** include::../validity/structs/VkInputAttachmentAspectReference.txt[] @@ -1721,7 +1722,7 @@ ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[] endif::VK_VERSION_1_1,VK_KHR_maintenance2[] // The nested ifdefs are there in anticipation of the hoped-for day when the // VU extractor and validation layers can handle VU with imbedded -// conditionals. +// conditionals. They are commented out until then. ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[] * [[VUID-vkCmdBeginRenderPass-initialLayout-01758]] If any of the pname:initialLayout or pname:finalLayout member of the diff --git a/chapters/resources.txt b/chapters/resources.txt index d69006f2..bc167010 100644 --- a/chapters/resources.txt +++ b/chapters/resources.txt @@ -658,11 +658,11 @@ ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] endif::VK_ANDROID_external_memory_android_hardware_buffer[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-VkImageCreateInfo-pNext-01889]] - If the pname:pNext chain does not contain an instance of + If the pname:pNext chain doesn't contain an instance of slink:VkExternalFormatANDROID, or if pname:format is not - ename:VK_FORMAT_UNDEFINED, the combination of pname:format, - pname:imageType, pname:tiling, pname:usage, and pname:flags must: be - supported, as indicated by a ename:VK_SUCCESS return value from + VK_FORMAT_UNDEFINED, the combination of pname:format, pname:imageType, + pname:tiling, pname:usage, and pname:flags must: be supported, as + indicated by a ename:VK_SUCCESS return value from fname:vkGetPhysicalDeviceImageFormatProperties invoked with the same values passed to the corresponding parameters. endif::VK_ANDROID_external_memory_android_hardware_buffer[] @@ -690,8 +690,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] flink:vkGetPhysicalDeviceQueueFamilyProperties2 for the pname:physicalDevice that was used to create pname:device endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-VkImageCreateInfo-format-00943]] pname:format must: not be ename:VK_FORMAT_UNDEFINED +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-VkImageCreateInfo-extent-00944]] pname:extent::pname:width must: be greater than `0`. * [[VUID-VkImageCreateInfo-extent-00945]] @@ -1003,9 +1005,9 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] pname:externalFormat member is not `0` * [[VUID-VkImageCreateInfo-pNext-01893]] If the pname:pNext chain includes a slink:VkExternalFormatANDROID - structure whose pname:externalFormat member is not `0`: + structure whose pname:externalFormat member is not code:0: ** pname:format must: be ename:VK_FORMAT_UNDEFINED - ** pname:flags must: not include ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT + ** pname:flags must: not include VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT ** pname:usage must: not include any usages except pname:VK_IMAGE_USAGE_SAMPLED_BIT ** pname:tiling must: be ename:VK_IMAGE_TILING_OPTIMAL @@ -1134,7 +1136,7 @@ sname:VkImageCreateInfo::pname:format must: be ename:VK_FORMAT_UNDEFINED. .Valid Usage **** * [[VUID-VkExternalFormatANDROID-externalFormat-01894]] - pname:externalFormat must: be `0` or a value returned in the + pname:externalFormat must: be code:0 or a value returned in the pname:externalFormat member of slink:VkAndroidHardwareBufferFormatPropertiesANDROID by an earlier call to flink:vkGetAndroidHardwareBufferPropertiesANDROID @@ -1442,7 +1444,7 @@ flink:vkGetImageSubresourceLayout is invariant for the lifetime of a single image. ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] However, the subresource layout of images in Android hardware buffer -external memory is not known until the image has been bound to memory, so +external memory isn't known until the image has been bound to memory, so calling fname:vkGetImageSubresourceLayout for such an image before it has been bound will result in undefined behavior. endif::VK_ANDROID_external_memory_android_hardware_buffer[] @@ -1480,7 +1482,7 @@ endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-vkGetImageSubresourceLayout-image-01895]] If pname:image was created with the - ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then pname:image must: be bound to memory. endif::VK_ANDROID_external_memory_android_hardware_buffer[] **** @@ -2214,6 +2216,7 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[] flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format +ifndef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-VkImageViewCreateInfo-image-01012]] If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL, pname:format must: be format that has at least one supported feature bit @@ -2253,6 +2256,52 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[] flag in sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format +endif::VK_ANDROID_external_memory_android_hardware_buffer[] +ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] + * [[VUID-VkImageViewCreateInfo-image-01965]] + If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and + pname:format is not ename:VK_FORMAT_UNDEFINED, pname:format must: be + format that has at least one supported feature bit present in the value + of sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties with the same value of + pname:format + * [[VUID-VkImageViewCreateInfo-image-01966]] + If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL, and + pname:format is not ename:VK_FORMAT_UNDEFINED, and pname:usage contains + ename:VK_IMAGE_USAGE_SAMPLED_BIT, pname:format must: be supported for + sampled images, as specified by the + ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT flag in + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties with the same value of + pname:format + * [[VUID-VkImageViewCreateInfo-image-01967]] + If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL, and + pname:format is not ename:VK_FORMAT_UNDEFINED, and pname:usage contains + ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:format must: be supported for + storage images, as specified by the + ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT flag in + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties with the same value of + pname:format + * [[VUID-VkImageViewCreateInfo-image-01968]] + If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL, and + pname:format is not ename:VK_FORMAT_UNDEFINED, and pname:usage contains + ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, pname:format must: be + supported for color attachments, as specified by the + ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties with the same value of + pname:format + * [[VUID-VkImageViewCreateInfo-image-01969]] + If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL, and + pname:format is not ename:VK_FORMAT_UNDEFINED, and pname:usage contains + ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:format must: be + supported for depth/stencil attachments, as specified by the + ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in + sname:VkFormatProperties::pname:optimalTilingFeatures returned by + fname:vkGetPhysicalDeviceFormatProperties with the same value of + pname:format +endif::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-VkImageViewCreateInfo-subresourceRange-01478]] pname:subresourceRange.baseMipLevel must: be less than the pname:mipLevels specified in slink:VkImageCreateInfo when pname:image @@ -2323,7 +2372,7 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance1[] Classes>> // The nested ifdefs are there in anticipation of the hoped-for day when the // VU extractor and validation layers can handle VU with imbedded -// conditionals. +// conditionals. They are commented out until then. // // If VK_VERSION_1_1,VK_KHR_maintenance2 and NOT VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[] @@ -2414,19 +2463,26 @@ ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] // The nested ifdefs are there in anticipation of the hoped-for day when the // VU extractor and validation layers can handle VU with imbedded -// conditionals. +// conditionals. They are commented out until then. ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-VkImageViewCreateInfo-image-01762]] If pname:image was not created with the ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, -ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] +// ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] or if the pname:format of the pname:image is a <> format and if pname:subresourceRange.aspectMask is ename:VK_IMAGE_ASPECT_COLOR_BIT, -endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] +// endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] pname:format must: be identical to the pname:format used to create pname:image +endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] +ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] + * [[VUID-VkImageViewCreateInfo-pNext-01970]] + If the pname:pNext chain contains an instance of + slink:VkSamplerYcbcrConversionInfo with a pname:conversion value other + than code:VK_NULL_HANDLE, all members of pname:components must: have the + value ename:VK_COMPONENT_SWIZZLE_IDENTITY. endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] * [[VUID-VkImageViewCreateInfo-image-01020]] If pname:image is non-sparse then it must: be bound completely and @@ -2440,12 +2496,12 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] If pname:image has an <>: - ** pname:format must: be ename:VK_FORMAT_UNDEFINED - ** The pname:pNext chain must: contain an instance of + ** pname:format must be ename:VK_FORMAT_UNDEFINED + ** The pname:pNext chain must contain an instance of slink:VkSamplerYcbcrConversionInfo with a pname:conversion object created with the same external format as pname:image - ** All members of pname:components must: be - ename:VK_COMPONENT_SWIZZLE_IDENTITY + ** All members of pname:components must be + pname:VK_COMPONENT_SWIZZLE_IDENTITY endif::VK_ANDROID_external_memory_android_hardware_buffer[] **** @@ -2870,7 +2926,7 @@ When allocating new memory for an image that can: be exported to a Android hardware buffer, the memory's pname:allocationSize must: be zero; the actual size will be determined by the dedicated image's parameters. After the memory has been allocated, the amount of space allocated from the -memory's heap can: be obtained by getting the image's memory requirements or +memory's heap can be obtained by getting the image's memory requirements or by calling flink:vkGetAndroidHardwareBufferPropertiesANDROID with the Android hardware buffer exported from the memory. endif::VK_ANDROID_external_memory_android_hardware_buffer[] @@ -2976,6 +3032,23 @@ endif::VK_VERSION_1_1,VK_KHR_external_memory[] ==== The implication of this requirement is that lazily allocated memory is disallowed for buffers in all cases. +==== + * The pname:size member is identical for all sname:VkBuffer objects + created with the same combination of creation parameters specified in + sname:VkBufferCreateInfo and its pname:pNext chain. + * The pname:size member is identical for all sname:VkImage objects created + with the same combination of creation parameters specified in + sname:VkImageCreateInfo and its pname:pNext chain. ++ +[NOTE] +.Note +==== +This, however, does not imply that they interpret the contents of the bound +memory identically with each other. +ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[] +That additional guarantee, however, can: be explicitly requested using +ename:VK_IMAGE_CREATE_ALIAS_BIT. +endif::VK_VERSION_1_1,VK_KHR_bind_memory2[] ==== ifdef::VK_VERSION_1_1,VK_KHR_get_memory_requirements2[] @@ -3088,7 +3161,7 @@ ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] * [[VUID-VkImageMemoryRequirementsInfo2-image-01897]] If pname:image was created with the - ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then pname:image must: be bound to memory. endif::VK_ANDROID_external_memory_android_hardware_buffer[] **** diff --git a/chapters/shaders.txt b/chapters/shaders.txt index 1c99e727..bd3fb8d4 100644 --- a/chapters/shaders.txt +++ b/chapters/shaders.txt @@ -64,7 +64,7 @@ To create a shader module, call: include::../api/protos/vkCreateShaderModule.txt[] * pname:device is the logical device that creates the shader module. - * pname:pCreateInfo parameter is a pointer to an instance of the + * pname:pCreateInfo is a pointer to an instance of the sname:VkShaderModuleCreateInfo structure. * pname:pAllocator controls host memory allocation as described in the <> chapter. diff --git a/include/vulkan/vulkan_core.h b/include/vulkan/vulkan_core.h index 9fefb438..f41b8d69 100644 --- a/include/vulkan/vulkan_core.h +++ b/include/vulkan/vulkan_core.h @@ -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 74 +#define VK_HEADER_VERSION 75 #define VK_NULL_HANDLE 0 @@ -2715,6 +2715,16 @@ typedef struct VkDrawIndirectCommand { uint32_t firstInstance; } VkDrawIndirectCommand; +typedef struct VkBaseOutStructure { + VkStructureType sType; + struct VkBaseOutStructure* pNext; +} VkBaseOutStructure; + +typedef struct VkBaseInStructure { + VkStructureType sType; + const struct VkBaseInStructure* pNext; +} VkBaseInStructure; + typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator); diff --git a/reflow_count.py b/reflow_count.py index 49d76cb4..7e531c20 100644 --- a/reflow_count.py +++ b/reflow_count.py @@ -1,2 +1,2 @@ # The value to start tagging VU statements at, unless overridden by -nextvu -startVUID = 1935 +startVUID = 1971 diff --git a/registry.txt b/registry.txt index ac32967c..9e848a8a 100644 --- a/registry.txt +++ b/registry.txt @@ -1111,10 +1111,11 @@ be implemented against. promoted to use a different author ID). * attr:contact - optional. The contact who registered or is currently responsible for extensions and layers using the tag, including - sufficient contact information to reach the contact such as - individual name together with email address, Github username, or - other contact information. If not present, this can be taken from - the corresponding tag:tag attribute just like attr:author. + sufficient contact information to reach the contact such as individual + name together with Github username (`@username`), Khronos internal + Gitlab username (`gitlab:@username`) if no public Github contact is + avaliable, or other contact information. If not present, this can be + taken from the corresponding tag:tag attribute just like attr:author. * attr:type - required if the attr:supported attribute is not `'disabled'`. Must be either `'device'` or `'instance'`, if present. * attr:requires - optional. Comma-separated list of extension names this diff --git a/xml/reg.py b/xml/reg.py index fd568e97..c9f92db3 100755 --- a/xml/reg.py +++ b/xml/reg.py @@ -563,14 +563,21 @@ class Registry: if depname: self.gen.logMsg('diag', 'Generating dependent type', depname, 'for', attrib, 'type', typename) - self.markTypeRequired(depname, required) + # Don't recurse on self-referential structures. + if (typename != depname): + self.markTypeRequired(depname, required) + else: + self.gen.logMsg('diag', 'type', typename, 'is self-referential') # Tag types used in defining this type (e.g. in nested # tags) # Look for in entire tree, # not just immediate children for subtype in type.elem.findall('.//type'): self.gen.logMsg('diag', 'markRequired: type requires dependent ', subtype.text) - self.markTypeRequired(subtype.text, required) + if (typename != subtype.text): + self.markTypeRequired(subtype.text, required) + else: + self.gen.logMsg('diag', 'type', typename, 'is self-referential') # Tag enums used in defining this type, for example in # member[MEMBER_SIZE] for subenum in type.elem.findall('.//enum'): diff --git a/xml/vk.xml b/xml/vk.xml index 8f4c13d9..2e9c680e 100644 --- a/xml/vk.xml +++ b/xml/vk.xml @@ -50,30 +50,30 @@ server. - - - + + + - - + + - - - + + + - + - - + + - - + + @@ -137,7 +137,7 @@ server. // Vulkan 1.1 version number #define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0 // Version of this file -#define VK_HEADER_VERSION 74 +#define VK_HEADER_VERSION 75 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -547,6 +547,14 @@ server. void* pUserData); Struct types + + VkStructureType sType + struct VkBaseOutStructure* pNext + + + VkStructureType sType + const struct VkBaseInStructure* pNext + int32_t x int32_t y @@ -6231,6 +6239,8 @@ server. + + @@ -6562,7 +6572,7 @@ server. - + @@ -6577,7 +6587,7 @@ server. - + @@ -6653,7 +6663,7 @@ server. - + @@ -6664,7 +6674,7 @@ server. - + @@ -6675,7 +6685,7 @@ server. - + @@ -6686,7 +6696,7 @@ server. - + @@ -6697,7 +6707,7 @@ server. - + @@ -6708,7 +6718,7 @@ server. - + @@ -6719,7 +6729,7 @@ server. - + @@ -6731,7 +6741,7 @@ server. - + @@ -6752,27 +6762,27 @@ server. - + - + - + - + @@ -6780,19 +6790,19 @@ server. - + - + - + @@ -6801,25 +6811,25 @@ server. - + - + - + - + @@ -6837,25 +6847,25 @@ server. - + - + - + - + @@ -6867,43 +6877,43 @@ server. - + - + - + - + - + - + - + @@ -6911,7 +6921,7 @@ server. - + @@ -6923,31 +6933,31 @@ server. - + - + - + - + - + @@ -6961,7 +6971,7 @@ server. - + @@ -6971,25 +6981,25 @@ server. - + - + - + - + @@ -7025,13 +7035,13 @@ server. - + - + @@ -7044,7 +7054,7 @@ server. - + @@ -7091,7 +7101,7 @@ server. - + @@ -7099,7 +7109,7 @@ server. - + @@ -7130,7 +7140,7 @@ server. - + @@ -7199,7 +7209,7 @@ server. - + @@ -7227,25 +7237,25 @@ server. - + - + - + - + @@ -7257,7 +7267,7 @@ server. - + @@ -7347,7 +7357,7 @@ server. - + @@ -7418,7 +7428,7 @@ server. - + @@ -7432,19 +7442,19 @@ server. - + - + - + @@ -7452,7 +7462,7 @@ server. - + @@ -7534,7 +7544,7 @@ server. - + @@ -7593,7 +7603,7 @@ server. - + @@ -7608,7 +7618,7 @@ server. - + @@ -7631,7 +7641,7 @@ server. - + @@ -7641,7 +7651,7 @@ server. - + @@ -7652,7 +7662,7 @@ server. - + @@ -7672,7 +7682,7 @@ server. - + @@ -7690,13 +7700,13 @@ server. - + - + @@ -7716,7 +7726,7 @@ server. - + @@ -7768,7 +7778,7 @@ server. - + @@ -7791,7 +7801,7 @@ server. - + @@ -7802,7 +7812,7 @@ server. - + @@ -7816,7 +7826,7 @@ server. - + @@ -7879,7 +7889,7 @@ server. - + @@ -7943,7 +7953,7 @@ server. - + @@ -7971,7 +7981,7 @@ server. - + @@ -7992,7 +8002,7 @@ server. - + @@ -8004,13 +8014,13 @@ server. - + - + @@ -8040,7 +8050,7 @@ server. - + @@ -8058,7 +8068,7 @@ server. - + @@ -8076,7 +8086,7 @@ server. - + @@ -8099,7 +8109,7 @@ server. - + @@ -8134,7 +8144,7 @@ server. - + @@ -8194,7 +8204,7 @@ server. - + @@ -8203,19 +8213,19 @@ server. - + - + - + @@ -8225,14 +8235,14 @@ server. - + - + @@ -8327,7 +8337,7 @@ server. - + @@ -8346,7 +8356,7 @@ server. - + @@ -8371,7 +8381,7 @@ server. - + @@ -8426,7 +8436,7 @@ server. - + @@ -8437,31 +8447,31 @@ server. - + - + - + - + - + @@ -8477,25 +8487,25 @@ server. - + - + - + - + @@ -8512,38 +8522,38 @@ server. - + - + - + - + - + - + @@ -8557,25 +8567,25 @@ server. - + - + - + - + @@ -8622,62 +8632,62 @@ server. - + - + - + - + - + - + - + - + - + - + @@ -8689,11 +8699,29 @@ server. - + + + + + + + + + + + + + + + + + + +