diff --git a/ChangeLog.txt b/ChangeLog.txt index 7e482f2a..8253b841 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -8,6 +8,242 @@ public pull requests that have been accepted. ----------------------------------------------------- +Change log for July 1, 2018 Vulkan 1.1.79 spec update: + + * Update release number to 79. + +Public Issues: + + * Add a note to the <> section clarifying that the required formats don't depend on + the used flags (public issue 671). + * Add a valid usage statement for flink:vkUpdateDescriptors that was + previously described for slink:VkImageSubresourceRange, but not as a + valid usage statement (public issue 713). + * Modify implicit valid usage generator script to not emit 'must: not be + 0' for a parameter that is a pointer to a flags field, such as + pname:pPeerMemoryFeatures (public issue 729). + +Internal Issues: + + * Add definitions of "`obsoleted`" and "`deprecated`", and modify the + definition of "`promoted`" in the <> (internal issue + 988). + * Add language for integer texel output conversions (the conversion is + undefined) to the <> section. Simplify and clarify the floating-point + conversion language in the <> section and the new <> section, and remove obsolete + language in the format-specific floating-point sections (internal issue + 1275). + * Add the elink:VkVendorId enumerated type to the Vulkan API / XML / + header, so reserved Khronos vendor IDs can be referred to symbolically + by clients. Note that only Khronos vendor IDs (e.g. non-PCI vendor IDs) + are defined (internal issue 1299). + * Fix typo in the <> table + (internal issue 1315). + * Clean up and simplify the + <> table and use symbols consistently with other tables. Add a + column for the number of planes. + * Add code:Float16 to the <> for the `VK_AMD_gpu_shader_half_float` extension. + +----------------------------------------------------- + +Change log for June 18, 2018 Vulkan 1.1.78 spec update: + + * Update release number to 78. + +Public Issues: + + * Change markup so parameter descriptions include links to structures, + instead of just their names (public issue 697). + * Resume publishing updated Vulkan 1.0 + KHR extensions and Vulkan 1.0 + + all extensions versions of the specification (public issue 722). + * Reapply fixes from public pull request 698 for + `VK_ANDROID_external_memory_android_hardware_buffer`, which accidentally + were reverted at some point (public pull request 724). + * Fix undefined format valid usage statements for slink:VkImageCreateInfo + in the presence of the + `VK_ANDROID_external_memory_android_hardware_buffer` extension (public + pull request 725). + * Miscellaneous markup consistency fixes (public pull request 728). + +Internal Issues: + + * When building specifications containing vendor extensions, add terms to + the Khronos spec copyright specifying that the result is not a ratified + specification (internal issue 739). + * Change the value of the + pname:maxDescriptorSetUpdateAfterBindUniformBuffers minimum limit to 72 + (6 times pname:maxPerStageDescriptorUpdateAfterBindUniformBuffers) in + the <> table (internal issue + 1300). + +Other Issues: + + * Fix link to resource image view compatibility table in the valid usage + statements for slink:VkImageFormatListCreateInfoKHR (internal pull + request 2711). + +----------------------------------------------------- + +Change log for June 10, 2018 Vulkan 1.1.77 spec update: + + * Update release number to 77. + +Public Issues: + + * Remove redundant asciidoctor ifdef in slink:VkDeviceCreateInfo valid + usage statement (public pull request 718). + +Internal Issues: + + * Require that the returned slink:VkMemoryRequirements::pname:alignment + reflect the minimum alignment requirements for the buffer's usages, and + make dynamic offset alignment valid usage more explicit for + flink:vkBindBufferMemory and flink:vkCmdBindDescriptorSets (internal + issue 1170). + * Explicitly state that objects of type code:OpTypeImage, + code:OpTypeSampler, and code:OpTypeSampledImage must not be stored to in + the <> + section (internal issue 1262). + * Clarify rules about validating descriptor set/binding against storage + class and descriptor type in the <> section, and add an anchor for and + references to the <> table (internal issue + 1266). + * Use correct spelling of SPIR-V decoration code:NonWritable in several + places (internal issue 1298). + +Other Issues: + + * Update specification links to files in the old + KhronosGroup/Vulkan-LoaderAndValidationLayers repository with + corresponding links into the new repositories that replace it. + * Move validity requirement for slink:VkSamplerCreateInfo into the valid + usage block instead of the body text, and give it a VUID. + * Use the full name of the "`style guide`" in a reference in the + description of slink:vkGetPhysicalDeviceProperties, update the + <>, and use the the full name + in the registry index page. + +----------------------------------------------------- + +Change log for May 25, 2018 Vulkan 1.1.76 spec update: + + * Update release number to 76. + +Internal Issues: + + * Add an exception clause to the license on `vk.xml`, enabling its use + with GPL-based projects (internal issue 1017). + * Remove the generated `vulkan_ext.[ch]` files, which are no longer + supported. Add `src/ext_loader/README.md` explaining why, and update + files in `xml/` to not generate them by default (internal issue 1268) + +Other Issues: + + * Fix typos in valid usage statements for the + ftext:vkDrawIndexedIndirectCount* commands, replacing + sizeof(VkDrawIndirectComment) with sizeof(VkDrawIndexedIndirectCommand). + * Modify the <> section to require code:NonReadable or code:NonWriteable in + SPIR-V code for images with an image format of code:Unknown if one of + the requisite code:shaderImageReadWithoutFormat or + code:shaderImageWriteWithoutFormat features is disabled. + +New Extensions: + + * `VK_KHR_get_display_properties2` + * `VK_KHR_draw_indirect_count` + +----------------------------------------------------- + +Change log for May 16, 2018 Vulkan 1.1.75 spec update: + + * Update release number to 75. + +Github Issues: + + * Use Github handles (e.g. @handle) for contact information in vk.xml, + when available (partial fix for public issue 630). + * Add size invariance guarantee to slink:VkMemoryRequirements for + buffer/image memory requirements (public issue 661). + * Correct scope (conditional constructs) in valid usage statement for + slink:VkBindImageMemoryInfo (public pull request 684). + * Clean up minor markup issues and typos in the + `VK_ANDROID_external_memory_android_hardware_buffer` extension appendix + (public pull request 698). + * Modify registry processing script to avoid irrelevant warnings of benign + enumerant redefinitions (public pull request 705). + * Fix some duplicate words and some misspelled "`stagess`" (public pull + request 712) + +Internal Issues: + + * Enable continuous integration tests on the internal Khronos gitlab + server by adding a .gitlab-ci.yml file. Note: this does not implement CI + on the public Github repository (internal issue 408). + * Add link from description of depth clamping in the <> section to the + slink:VkPipelineRasterizationStateCreateInfo::pname:depthClampEnable + parameter which enables it, making it easily searchable / findable + (internal issue 1125). + * Clarify that arrays of arrays of descriptors are not allowed in the + <> and + <> sections (internal issue 1192). + * Comment out some redundant nested asciidoctor conditionals in the + slink:VkImageViewCreateInfo valid usage block, and explain in all cases + why the redundant conditional exist and are commented out (internal + issue 1231). + * Move a valid usage statement from slink:VkCommandPoolCreateInfo to the + parent flink:vkCreateCommandPool, where the device queue is known + (internal issue 1233). + * Add new slink:VkBaseInStructure and slink:VkBaseOutStructure types which + can be used by extensions and implementations for handling Vulkan + sType/pNext style structures in a more generic way (internal issue + 1265). + * Clarify that + slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures + only applies to external-format images. Add references to this in valid + usage statements that previously only referred to + slink:VkFormatProperties (internal issue 1244). + * Fix the description of elink:VkPipelineCreateFlagBits enumerant + ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT to match the + name (internal issue 1279). + * Add a NOTE to the <> section making it clear that variables sharing + a storage class may use identical descriptor set and bindings. + Specifically state the sometimes misunderstood ability to have one or + more differently typed image descriptors sharing a descriptor set and + binding (internal SPIR-V issue 264). + * Make DynamicIndexing features and capabilities also control the + uniformity of the descriptor used in memory access instructions in the + <> section. This + makes them also apply to variable_pointer usage, which can bypass the + array indexing operation (internal SPIR-V issue 289). + +Other Issues: + + * Correct flink:vkCmdBlitImage limitations on cubic blits to be 2D only, + not 3D. + * Update valid usage statements for slink:VkRenderPassCreateInfo and + slink:VkInputAttachmentAspectReference. + * Move YCbCr-related VU statements from slink:VkDescriptorImageInfo to + slink:VkWriteDescriptorSet, where all needed information is known, and + remove redundant statements. + * Move SPIR-V restriction that images be of either sampled or storage + types from the <> section to the <> section of the SPIR-V appendix. + +----------------------------------------------------- + Change log for April 21, 2018 Vulkan 1.1.74 spec update: * Update release number to 74. diff --git a/Makefile b/Makefile index 6e2f05db..f368649c 100644 --- a/Makefile +++ b/Makefile @@ -107,7 +107,7 @@ VERBOSE = # EXTRAATTRIBS sets additional attributes, if passed to make # ADOCOPTS options for asciidoc->HTML5 output NOTEOPTS = -a editing-notes -a implementation-guide -PATCHVERSION = 78 +PATCHVERSION = 79 ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS))) SPECREVISION = 1.1.$(PATCHVERSION) else diff --git a/appendices/VK_AMD_negative_viewport_height.txt b/appendices/VK_AMD_negative_viewport_height.txt index ff487a76..343bf047 100755 --- a/appendices/VK_AMD_negative_viewport_height.txt +++ b/appendices/VK_AMD_negative_viewport_height.txt @@ -9,8 +9,8 @@ include::meta/VK_AMD_negative_viewport_height.txt[] - Graham Sellers, AMD - Baldur Karlsson *Interactions and External Dependencies*:: - - Deprecated by `VK_KHR_maintenance1` - - Deprecated by Vulkan 1.1 + - Obsoleted by `VK_KHR_maintenance1` + - Obsoleted by Vulkan 1.1 This extension allows an application to specify a negative viewport height. The result is that the viewport transformation will flip along the y-axis. @@ -21,7 +21,7 @@ The result is that the viewport transformation will flip along the y-axis. This allows apps to avoid having to use `gl_Position.y = -gl_Position.y` in shaders also targeting other APIs. -=== Deprecation by VK_KHR_maintenance1 and Vulkan 1.1 +=== Obsoletion by VK_KHR_maintenance1 and Vulkan 1.1 Functionality in this extension is included in `VK_KHR_maintenance1` and Vulkan 1.1. @@ -29,7 +29,6 @@ Due to some slight behavioral differences, this extension must: not be enabled alongside `VK_KHR_maintenance1`, or in an instance created with version 1.1 or later requested in slink:VkApplicationInfo::pname:apiVersion. - === Version History * Revision 1, 2016-09-02 (Matthaeus Chajdas) diff --git a/appendices/glossary.txt b/appendices/glossary.txt index c8d2da88..ace580d8 100644 --- a/appendices/glossary.txt +++ b/appendices/glossary.txt @@ -226,9 +226,16 @@ Cull Volume:: The intersection of the view volume with all cull half-spaces. Decoration (SPIR-V):: - Auxiliary information such as built-in variables, stream numbers, - invariance, interpolation type, relaxed precision, etc., added to - variables or structure-type members through decorations. + Auxiliary information such as built-in variables, stream numbers, + invariance, interpolation type, relaxed precision, etc., added to + variables or structure-type members through decorations. + +Deprecated:: + A feature is deprecated if it is no longer recommended as the correct or + best way to achieve its intended purpose. + Generally a newer feature will have been created that solves the same + problem - in cases where no newer alternative feature exists, + justification should be provided. Depth/Stencil Attachment:: A subpass attachment point, or image view, that is the target of depth @@ -804,6 +811,13 @@ Object Table:: Entries are registered or unregistered via code:uint32_t indices. endif::VK_NVX_device_generated_commands[] +Obsoleted:: + A feature is obsolete if it can no longer be used. + For core features, making one obsolete would be in violation of the + <>, so must not be done. + However extensions do not have these guarantees, and can be made + obsolete by a newer core version or extension. + Overlapped Range (Aliased Range):: The aliased range of a device memory allocation that intersects a given image subresource of an image or range of a buffer. @@ -931,15 +945,19 @@ Primitive Topology:: State that controls how vertices are assembled into primitives, e.g. as lists of triangles, strips of lines, etc.. -ifdef::VK_VERSION_1_1[] Promoted:: - An extension whose interfaces are later made available as part of a - <>, with the author ID suffixes - removed, is said to be _promoted_ to that core version. - Minor differences, such as making the availability of specific features - from the extension supported only if a corresponding feature bit is - enabled, may still exist. + A feature is promoted if it is taken from an older extension and made + available as part of a new <>, or a + newer extension that is considered to be either as widely supported or + more so. + A promoted feature may have minor differences from the original such as: + * It may be renamed + * A small number of non-intrusive parameters may have been added + * The feature may be advertised differently by + <> + * The author ID suffixes will be changed or removed as appropriate +ifdef::VK_VERSION_1_1[] Protected Buffer:: A buffer to which protected device memory can: be bound. diff --git a/appendices/spirvenv.txt b/appendices/spirvenv.txt index 5e71e611..efeb4c88 100755 --- a/appendices/spirvenv.txt +++ b/appendices/spirvenv.txt @@ -195,6 +195,9 @@ ifdef::VK_EXT_descriptor_indexing[] | code:UniformTexelBufferArrayNonUniformIndexingEXT | <> | code:StorageTexelBufferArrayNonUniformIndexingEXT | <> endif::VK_EXT_descriptor_indexing[] +ifdef::VK_AMD_gpu_shader_half_float[] +| code:Float16 | `<>` +endif::VK_AMD_gpu_shader_half_float[] |==== ifdef::VK_VERSION_1_1,VK_KHR_variable_pointers[] diff --git a/chapters/VK_EXT_debug_utils.txt b/chapters/VK_EXT_debug_utils.txt index 7fd7bbfb..fa10a3e5 100644 --- a/chapters/VK_EXT_debug_utils.txt +++ b/chapters/VK_EXT_debug_utils.txt @@ -353,8 +353,8 @@ of Vulkan when events of interest occur. When an event of interest does occur, the debug messenger will submit a debug message to the debug callback that was provided during its creation. Additionally, the debug messenger is responsible with filtering out debug -messages that the callback isn't interested in and will only provide desired -debug messages. +messages that the callback is not interested in and will only provide +desired debug messages. -- diff --git a/chapters/descriptorsets.txt b/chapters/descriptorsets.txt index 4ba28037..0b65301e 100644 --- a/chapters/descriptorsets.txt +++ b/chapters/descriptorsets.txt @@ -1832,7 +1832,7 @@ ifdef::VK_EXT_descriptor_indexing[] * ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT specifies that descriptor sets allocated from this pool can: include bindings with the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT bit set. - It is valid to allocate descriptor sets that have bindings that don't + It is valid to allocate descriptor sets that have bindings that do not set the ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT bit from a pool that has ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT set. @@ -2610,7 +2610,8 @@ ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] pname:imageView must: not be 2D or 2D array image view created from a 3D image endif::VK_VERSION_1_1,VK_KHR_maintenance1[] - * If pname:imageView is created from a depth/stencil image, the + * [[VUID-VkDescriptorImageInfo-imageView-01976]] + If pname:imageView is created from a depth/stencil image, the pname:aspectMask used to create the pname:imageView must: include either ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT but not both. diff --git a/chapters/devsandqueues.txt b/chapters/devsandqueues.txt index ecc1e9a9..c391894c 100644 --- a/chapters/devsandqueues.txt +++ b/chapters/devsandqueues.txt @@ -154,6 +154,7 @@ Procedures and Conventions>> document in the section "`Registering a Vendor ID with Khronos`". Khronos vendor IDs are allocated starting at 0x10000, to distinguish them from the PCI vendor ID namespace. +Khronos vendor IDs are symbolically defined in the elink:VkVendorId type. The vendor is also responsible for the value returned in pname:deviceID. If the implementation is driven primarily by a https://pcisig.com/[PCI @@ -177,6 +178,29 @@ should: use the same device ID, even if those uses occur in different SoCs. include::../validity/structs/VkPhysicalDeviceProperties.txt[] -- +[open,refpage='VkVendorId',desc='Khronos vendor IDs',type='enums'] +-- +Khronos vendor IDs which may: be returned in +slink:VkPhysicalDeviceProperties::pname:vendorID are: + +include::../api/enums/VkVendorId.txt[] + +[NOTE] +.Note +==== +Khronos vendor IDs may be allocated by vendors at any time. +Only the latest canonical versions of this Specification, of the +corresponding `vk.xml` API Registry, and of the corresponding +`vulkan_core.h` header file must: contain all reserved Khronos vendor IDs. + +Only Khronos vendor IDs are given symbolic names at present. +PCI vendor IDs returned by the implementation can be looked up in the +PCI-SIG database. +==== + +-- + + [open,refpage='VkPhysicalDeviceType',desc='Supported physical device types',type='enums'] -- diff --git a/chapters/features.txt b/chapters/features.txt index a38577cb..6718399f 100755 --- a/chapters/features.txt +++ b/chapters/features.txt @@ -2666,7 +2666,7 @@ structure describe the following implementation-dependent limits: across all pools that are created with the ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT bit set. Pool creation may: fail when this limit is exceeded, or when the space - this limit represents can't satisfy a pool creation due to + this limit represents cannot: satisfy a pool creation due to fragmentation. * [[features-limits-shaderUniformBufferArrayNonUniformIndexingNative]] pname:shaderUniformBufferArrayNonUniformIndexingNative is a boolean @@ -5311,8 +5311,14 @@ supported, and images of that format cannot be created. endif::VK_VERSION_1_1,VK_KHR_maintenance1[] ==== -If pname:format is a block-compression format, then buffers must: not -support any features for the format. +If pname:format is a block-compression format, then pname:bufferFeatures +must: not support any features for the format. + +ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] +If pname:format is a multi-plane format then pname:linearTilingFeatures and +pname:optimalTilingFeatures must: not contain +ename:VK_FORMAT_FEATURE_DISJOINT_BIT. +endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] include::../validity/structs/VkFormatProperties.txt[] -- @@ -5541,6 +5547,13 @@ advertise an extension or needing to explicitly enable them. Support for additional functionality beyond the requirements listed here is queried using the flink:vkGetPhysicalDeviceFormatProperties command. +[NOTE] +.Note +==== +The required formats are supported for all elink:VkImageCreateFlags values +as long as those flag values are otherwise allowed. +==== + The following tables show which feature bits must: be supported for each format. ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] @@ -6095,51 +6108,50 @@ Y'C~B~C~R~ conversion>> must: be enabled for the following formats: [[features-formats-requiring-sampler-ycbcr-conversion]] .Formats requiring sampler Y'C~B~C~R~ conversion for ename:VK_IMAGE_ASPECT_COLOR_BIT image views -[width="100%",cols="15,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] +[width="100%",cols="18,^3,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |==== -10+>| Format must: be supported if slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures is enabled .11+^.^| {downarrow} -9+>| Format is treated as having 2{times}1 texel blocks by transfer operations .10+^.^| {downarrow} -8+>| ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT .9+^.^| {downarrow} -7+>| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT .8+^.^| {downarrow} -6+>| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT .7+^.^| {downarrow} -5+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .6+^.^| {downarrow} -4+>| ename:VK_FORMAT_FEATURE_DISJOINT_BIT .5+^.^| {downarrow} -3+>| Multi-planar format with three planes .4+^.^| {downarrow} -2+>| Multi-planar format with two planes .3+^.^| {downarrow} -1+>| Single-plane format .2+^.^| {downarrow} -s| Format -| ename:VK_FORMAT_G8B8G8R8_422_UNORM | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_B8G8R8G8_422_UNORM | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM | | | {sym1} | {sym2} | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} -| ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM | | {sym1} | | {sym2} | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} -| ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM | | {sym1} | | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 | {sym1} | | | | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 | | {sym1} | | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 | | {sym1} | | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 | {sym1} | | | | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 | | {sym1} | | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 | | {sym1} | | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G16B16G16R16_422_UNORM | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_B16G16R16G16_422_UNORM | {sym1} | | | | {sym2} | {sym2} | {sym2} | | {sym1} | -| ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM | | {sym1} | | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM | | {sym1} | | {sym2} | {sym2} | {sym2} | {sym2} | | | -| ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM | | | {sym1} | {sym2} | {sym2} | {sym2} | {sym2} | | | -11+| Format features marked {sym1} must: be supported if the format is supported -11+| Format features marked {sym2} may: be supported by the format +11+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT .11+^.^| {downarrow} +10+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT .10+^.^| {downarrow} +9+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT .9+^.^| {downarrow} +8+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT .8+^.^| {downarrow} +7+>| ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT .7+^.^| {downarrow} +6+>| ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT .6+^.^| {downarrow} +5+>| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT .5+^.^| {downarrow} +4+>| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT .4+^.^| {downarrow} +3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .3+^.^| {downarrow} +2+>| ename:VK_FORMAT_FEATURE_DISJOINT_BIT .2+^.^| {downarrow} +s| Format s| Planes +| ename:VK_FORMAT_G8B8G8R8_422_UNORM | 1 | | | | | | | | | | +| ename:VK_FORMAT_B8G8R8G8_422_UNORM | 1 | | | | | | | | | | +| ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM | 3 | | {sym1} | {sym1} | {sym1} | {sym1} | | | | | +| ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM | 2 | | {sym1} | {sym1} | {sym1} | {sym1} | | | | | +| ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM | 3 | | | | | | | | | | +| ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM | 2 | | | | | | | | | | +| ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM | 3 | | | | | | | | | | +| ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 | 1 | | | | | | | | | | +| ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 | 1 | | | | | | | | | | +| ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 | 1 | | | | | | | | | | +| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 | 3 | | | | | | | | | | +| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 | 2 | | | | | | | | | | +| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 | 3 | | | | | | | | | | +| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 | 2 | | | | | | | | | | +| ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 | 3 | | | | | | | | | | +| ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 | 1 | | | | | | | | | | +| ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 | 1 | | | | | | | | | | +| ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 | 1 | | | | | | | | | | +| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 | 3 | | | | | | | | | | +| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 | 2 | | | | | | | | | | +| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 | 3 | | | | | | | | | | +| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 | 2 | | | | | | | | | | +| ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 | 3 | | | | | | | | | | +| ename:VK_FORMAT_G16B16G16R16_422_UNORM | 1 | | | | | | | | | | +| ename:VK_FORMAT_B16G16R16G16_422_UNORM | 1 | | | | | | | | | | +| ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM | 3 | | | | | | | | | | +| ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM | 2 | | | | | | | | | | +| ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM | 3 | | | | | | | | | | +| ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM | 2 | | | | | | | | | | +| ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM | 3 | | | | | | | | | | +12+| Format features marked {sym1} must: be supported only if slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures is enabled |==== endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] diff --git a/chapters/fundamentals.txt b/chapters/fundamentals.txt index 97710f6f..d3309474 100644 --- a/chapters/fundamentals.txt +++ b/chapters/fundamentals.txt @@ -1213,15 +1213,21 @@ as [eq]#0 / 0#. Implementations may: support [eq]#Inf# and [eq]#NaN# in their floating-point computations. -Any representable floating-point value is legal as input to a Vulkan command -that requires floating-point data. -The result of providing a value that is not a floating-point number to such -a command is unspecified, but must: not lead to Vulkan interruption or -termination. -In <> arithmetic, for example, providing a negative zero -or a denormalized number to an Vulkan command must: yield deterministic -results, while providing a [eq]#NaN# or [eq]#Inf# yields unspecified -results. + +[[fundamentals-fp-conversion]] +=== Floating-Point Format Conversions + +When a value is converted to a defined floating-point representation, finite +values falling between two representable finite values are rounded to one or +the other. +The rounding mode is not defined. +Finite values whose magnitude is larger than that of any representable +finite value may be rounded either to the closest representable finite value +or to the appropriately signed infinity. +For unsigned destination formats any negative values are converted to zero. +Positive infinity is converted to positive infinity; negative infinity is +converted to negative infinity in signed formats and to zero in unsigned +formats; and any [eq]#NaN# is converted to a [eq]#NaN#. [[fundamentals-fp16]] @@ -1230,14 +1236,6 @@ results. 16-bit floating point numbers are defined in the "`16-bit floating point numbers`" section of the <>. -Any representable 16-bit floating-point value is legal as input to a Vulkan -command that accepts 16-bit floating-point data. -The result of providing a value that is not a floating-point number (such as -[eq]#Inf# or [eq]#NaN#) to such a command is unspecified, but must: not lead -to Vulkan interruption or termination. -Providing a denormalized number or negative zero to Vulkan must: yield -deterministic results. - [[fundamentals-fp11]] === Unsigned 11-Bit Floating-Point Numbers @@ -1246,26 +1244,6 @@ Unsigned 11-bit floating point numbers are defined in the "`Unsigned 11-bit floating point numbers`" section of the <>. -When a floating-point value is converted to an unsigned 11-bit -floating-point representation, finite values are rounded to the closest -representable finite value. - -While less accurate, implementations are allowed to always round in the -direction of zero. -This means negative values are converted to zero. -Likewise, finite positive values greater than 65024 (the maximum finite -representable unsigned 11-bit floating-point value) are converted to 65024. -Additionally: negative infinity is converted to zero; positive infinity is -converted to positive infinity; and both positive and negative [eq]#NaN# are -converted to positive [eq]#NaN#. - -Any representable unsigned 11-bit floating-point value is legal as input to -a Vulkan command that accepts 11-bit floating-point data. -The result of providing a value that is not a floating-point number (such as -[eq]#Inf# or [eq]#NaN#) to such a command is unspecified, but must: not lead -to Vulkan interruption or termination. -Providing a denormalized number to Vulkan must: yield deterministic results. - [[fundamentals-fp10]] === Unsigned 10-Bit Floating-Point Numbers @@ -1274,30 +1252,19 @@ Unsigned 10-bit floating point numbers are defined in the "`Unsigned 10-bit floating point numbers`" section of the <>. -When a floating-point value is converted to an unsigned 10-bit -floating-point representation, finite values are rounded to the closest -representable finite value. - -While less accurate, implementations are allowed to always round in the -direction of zero. -This means negative values are converted to zero. -Likewise, finite positive values greater than 64512 (the maximum finite -representable unsigned 10-bit floating-point value) are converted to 64512. -Additionally: negative infinity is converted to zero; positive infinity is -converted to positive infinity; and both positive and negative [eq]#NaN# are -converted to positive [eq]#NaN#. - -Any representable unsigned 10-bit floating-point value is legal as input to -a Vulkan command that accepts 10-bit floating-point data. -The result of providing a value that is not a floating-point number (such as -[eq]#Inf# or [eq]#NaN#) to such a command is unspecified, but must: not lead -to Vulkan interruption or termination. -Providing a denormalized number to Vulkan must: yield deterministic results. - [[fundamentals-general]] === General Requirements +Any representable floating-point value in the appropriate format is legal as +input to a Vulkan command that requires floating-point data. +The result of providing a value that is not a floating-point number to such +a command is unspecified, but must: not lead to Vulkan interruption or +termination. +For example, providing a negative zero (where applicable) or a denormalized +number to an Vulkan command must: yield deterministic results, while +providing a [eq]#NaN# or [eq]#Inf# yields unspecified results. + Some calculations require division. In such cases (including implied divisions performed by vector normalization), division by zero produces an unspecified result but must: diff --git a/chapters/primsrast.txt b/chapters/primsrast.txt index 5d6d3b17..7d2310f2 100644 --- a/chapters/primsrast.txt +++ b/chapters/primsrast.txt @@ -454,7 +454,7 @@ include::../api/structs/VkPipelineSampleLocationsStateCreateInfoEXT.txt[] are ignored. * pname:sampleLocationsInfo is the sample locations to use during rasterization if pname:sampleLocationsEnable is ename:VK_TRUE and the - graphics pipeline isn't created with + graphics pipeline is not created with ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT. include::../validity/structs/VkPipelineSampleLocationsStateCreateInfoEXT.txt[] diff --git a/chapters/synchronization.txt b/chapters/synchronization.txt index b0e985b2..bd4c9d32 100644 --- a/chapters/synchronization.txt +++ b/chapters/synchronization.txt @@ -254,7 +254,7 @@ used, and current command buffer state when the command was recorded. <>, <>, and <> all execute in different sets of <>. -<> don't execute in a defined +<> do not execute in a defined pipeline, but do execute ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT and ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT. @@ -1855,7 +1855,7 @@ provided. This special behavior for importing an invalid sync file descriptor allows easier interoperability with other system APIs which use the convention that an invalid sync file descriptor represents work that has already completed -and doesn't need to be waited for. +and does not need to be waited for. It is consistent with the option for implementations to return a `-1` file descriptor when exporting a ename:VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT from a sname:VkFence which is signaled. diff --git a/chapters/textures.txt b/chapters/textures.txt index 7b2f49de..d019d244 100644 --- a/chapters/textures.txt +++ b/chapters/textures.txt @@ -1279,9 +1279,13 @@ Any unused components are ignored. Each component is converted based on its type and size (as defined in the <> section for each -elink:VkFormat), using the appropriate equations in -<> and +elink:VkFormat). +Floating-point outputs are converted as described in +<> and <>. +Integer outputs are converted such that their value is preserved. +The converted value of any integer that cannot be represented in the target +format is undefined. == Derivative Operations diff --git a/images/non_strict_lines.svg b/images/non_strict_lines.svg index 0616db8c..420e44e9 100644 --- a/images/non_strict_lines.svg +++ b/images/non_strict_lines.svg @@ -156,7 +156,7 @@ id="tspan2797-02" x="134.9375" y="32.416672" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Edge 0 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.52916664">Edge 3 > 12) & 0x3ff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) // Version of this file -#define VK_HEADER_VERSION 78 +#define VK_HEADER_VERSION 79 #define VK_NULL_HANDLE 0 @@ -1214,6 +1214,16 @@ typedef enum VkObjectType { VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF } VkObjectType; +typedef enum VkVendorId { + VK_VENDOR_ID_VIV = 0x10001, + VK_VENDOR_ID_VSI = 0x10002, + VK_VENDOR_ID_KAZAN = 0x10003, + VK_VENDOR_ID_BEGIN_RANGE = VK_VENDOR_ID_VIV, + VK_VENDOR_ID_END_RANGE = VK_VENDOR_ID_KAZAN, + VK_VENDOR_ID_RANGE_SIZE = (VK_VENDOR_ID_KAZAN - VK_VENDOR_ID_VIV + 1), + VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF +} VkVendorId; + typedef VkFlags VkInstanceCreateFlags; typedef enum VkFormatFeatureFlagBits { diff --git a/reflow_count.py b/reflow_count.py index da28161e..5602c4d7 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 = 1976 +startVUID = 1977 diff --git a/registry.txt b/registry.txt index 9e848a8a..534f7914 100644 --- a/registry.txt +++ b/registry.txt @@ -232,9 +232,6 @@ Zero or more of each of the following tags, normally in this order * tag:comment - Contains arbitrary text, such as a copyright statement. - * <> - defines Khronos vendor IDs, - described in detail in the "`Layers and Extensions`" appendix of the - Vulkan Specification. * <> - defines platform names corresponding to platform-specific <>. * <> - defines author IDs used for @@ -267,40 +264,6 @@ Comment tags are removed by output generators if they would otherwise appear in generated headers, asciidoc include files, etc. -[[tag-vendorids]] -= Vendor ID Blocks (tag:vendorids tag) - -A tag:vendorids tag contains descriptions of vendor IDs for physical devices -which do not have PCI vendor IDs. - -== Attributes of tag:vendorids tags - - * attr:comment - optional. Arbitrary string (unused). - -== Contents of tag:vendorids tags - -Zero or more tag:vendorid tags, in arbitrary order (though they are -typically ordered by sorting on the author ID). - - -[[tag-vendorid]] -= Vendor IDs (tag:vendorid tag) - -A tag:vendorid tag describes a single vendor ID. - -== Attributes of tag:vendorid tags - - * attr:name - required. - The author ID, as registered with Khronos. - This must match an author ID in the attr:name field of a tag:tag tag. - * attr:id - required. The reserved vendor ID, as a hexadecimal number. - * attr:comment - optional. Arbitrary string (unused). - -== Contents of tag:vendorid tags - -No contents are allowed. All information is contained in the attributes. - - [[tag-platforms]] = Platform Name Blocks (tag:platforms tag) @@ -2030,6 +1993,7 @@ files and Python scripts are logged in Github history. [[changelog]] = Change Log + * 2018-06-25 - Remove attr:vendorids tags for Khronos vendor IDs. * 2018-04-15 - Add attr:requiresCore. * 2018-03-07 - Updated for Vulkan 1.1 release. * 2018-02-21 - Add descriptions of the attr:extnumber and attr:alias diff --git a/style/extensions.txt b/style/extensions.txt index 33f53dc0..e1f323a8 100644 --- a/style/extensions.txt +++ b/style/extensions.txt @@ -272,16 +272,17 @@ implementations must obtain a Khronos vendor ID. Khronos vendor IDs are reserved in a similar fashion to <>. While vendor IDs are not directly related to API extensions, the reservation -process is very similar and so is described in this section. +process is similar, and so is described in this section. To reserve an Khronos vendor ID, you must first have a Khronos author ID. Propose a merge request against <> in the `master` branch. -The merge must add a `` tag and fill in the `name` and `id` -attributes. -The `name` attribute must be set to the author ID. -The `id` attribute must be the first sequentially available ID in the list -of `` tags. +The merge must define a new enumerant by adding an `` tag to the +`VkVendorId` `` tag, following the existing examples. +The `value` attribute of the `` must be the next available unused +value, and is the reserved vendor ID. +The `name` attribute must be `VK_VENDOR_ID_`, where `` is +the author tag. The vendor ID will be reserved only once this merge request has been accepted. diff --git a/styleguide.txt b/styleguide.txt index 86fe299d..5ce18e50 100644 --- a/styleguide.txt +++ b/styleguide.txt @@ -150,6 +150,9 @@ include::style/vuid.txt[] = Revision History +* 2018-06-25 - Modify the process for <> to define vendor ID values as part of an + enumerated type. * 2018-03-07 - Updated for Vulkan 1.1 release. * 2018-01-10 - Move details of mandated extension compatibility from the <> section into the diff --git a/xml/registry.rnc b/xml/registry.rnc index c7dc16ff..ca218ba7 100644 --- a/xml/registry.rnc +++ b/xml/registry.rnc @@ -25,7 +25,6 @@ namespace xsd = "http://www.w3.org/2001/XMLSchema-datatypes" start = element registry { ( element comment { text } ? | - Vendorids * | Platforms * | Tags * | Types * | @@ -36,22 +35,6 @@ start = element registry { ) * } -# defines a group of vendor IDs -Vendorids = element vendorids { - Comment ? , - Vendorid * -} - -# defines a single vendor ID. -# name - author ID of the vendor -# id - Khronos vendor ID (hexadecimal constant starting at 0x10000) -# comment - unused -Vendorid = element vendorid { - attribute name { text } , - attribute id { text } , - Comment ? -} - # defines a group of platform names Platforms = element platforms { Comment ? , @@ -276,6 +259,7 @@ Unused = element unused { Vendor ? , Comment ? } + # defines a group of commands Commands = element commands { Comment ? , diff --git a/xml/validitygenerator.py b/xml/validitygenerator.py index 4cea98a8..57f612f7 100644 --- a/xml/validitygenerator.py +++ b/xml/validitygenerator.py @@ -445,7 +445,8 @@ class ValidityOutputGenerator(OutputGenerator): asciidoc += '\n' # Add additional line for non-optional bitmasks - if self.getTypeCategory(paramtype.text) == 'bitmask': + isOutputParam = self.paramIsPointer(param) and not (param.text is not None and 'const' in param.text) + if self.getTypeCategory(paramtype.text) == 'bitmask' and not isOutputParam: isMandatory = param.attrib.get('optional') is None #TODO does not really handle if someone tries something like optional="true,false" if isMandatory: asciidoc += self.makeAnchor(blockname, paramname.text, 'requiredbitmask') diff --git a/xml/vk.xml b/xml/vk.xml index 5ae506e4..99f0c6a4 100644 --- a/xml/vk.xml +++ b/xml/vk.xml @@ -44,13 +44,6 @@ private version is maintained in the master branch of the member gitlab server. - - - - - - - @@ -153,7 +146,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 78 +#define VK_HEADER_VERSION 79 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -515,6 +508,9 @@ server. + Enumerated types in the header, but not used by the API + + The PFN_vk*Function types are used by VkAllocationCallbacks below typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)( void* pUserData, @@ -4179,6 +4175,15 @@ server. + + Vendor IDs are now represented as enums instead of the old + <vendorids> tag, allowing them to be included in the + API headers. + + + + + @@ -6328,6 +6333,7 @@ server. + @@ -8826,5 +8832,11 @@ server. + + + + + +