Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
#!/usr/bin/python3 -i
#
2019-01-06 03:40:12 +00:00
# Copyright (c) 2013-2019 The Khronos Group Inc.
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2019-03-17 13:05:46 +00:00
import re
import sys
2018-03-24 20:19:37 +00:00
from functools import total_ordering
2019-03-17 13:05:46 +00:00
from generator import GeneratorOptions , OutputGenerator , regSortFeatures , write
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
# ExtensionMetaDocGeneratorOptions - subclass of GeneratorOptions.
class ExtensionMetaDocGeneratorOptions ( GeneratorOptions ) :
""" Represents options during extension metainformation generation for Asciidoc """
def __init__ ( self ,
2019-03-17 13:05:46 +00:00
conventions = None ,
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
filename = None ,
directory = ' . ' ,
apiname = None ,
profile = None ,
versions = ' .* ' ,
emitversions = ' .* ' ,
defaultExtensions = None ,
addExtensions = None ,
removeExtensions = None ,
Change log for March 7, 2018 Vulkan 1.1.70 spec update:
* Vulkan 1.1 initial release. Bump API patch number and header version
number to 70 for this update. The patch number will be used for both
Vulkan 1.1 and Vulkan 1.0 updates, and continues to increment
continuously from the previous Vulkan 1.0.69 update.
NOTE: We are not publishing an updated 1.0.70 specification, or 1.1
reference pages, along with 1.1.70. There are still minor issues to work
out with those build targets. However, we will soon generate all three
types of documents as part of the regular spec update cycle.
NOTE: The GitHub KhronosGroup/Vulkan-Docs repository now maintains the
current specification in the `master` branch. The `1.0` branch is out of
date and will not be maintained, since we will be generating both 1.1
and 1.0 specifications from the `master` branch in the future.
Github Issues:
* Clarify how mapped memory ranges are flushed in
flink:vkFlushMappedMemoryRanges (public issue 127).
* Specify that <<synchronization-pipeline-stages, Pipeline Stages>> are a
list of tasks that each command performs, rather than necessarily being
discrete pieces of hardware that one task flows through. Add a
"`synchronization command`" pipeline type which all synchronization
command execute (it's just TOP + BOTTOM), with an explanatory note
(public issue 554).
Internal Issues:
* Regenerate all images used in the spec in Inkscape with a consistent
look-and-feel, and adjust image size attributes so they're all legible,
and not too large with respect to the spec body text (internal issue
701).
* Document in the <<extensions,extensions>> appendix and in the style
guide that `KHX` extensions are no longer supported or used in the
Vulkan 1.1 timeframe (internal issue 714).
* Remove the leftover equations_temp directory after PDF build completes
(internal issue 925).
* Update the <<credits, Credits (Informative)>> appendix to include
contributors to Vulkan 1.1, and to list them according to the API
version(s) they contributed to (internal issue 987).
* Add a NOTE to the introduction explaining that interfaces defined by
extensions which were promoted to Vulkan 1.1 are now expressed as
aliases of the Vulkan 1.1 type (internal issue 991).
* Instrument spec source conditionals so spec can be built with 1.1
features, extensions promoted to 1.1, or both (internal issues 992,
998).
* Modify the XML schema and tools to support explicit aliasing of types,
structures, and commands, and use this to express the promotion of 1.0
extensions to 1.1 core features, by making the extension interfaces
aliases of the core features they were promoted to. Mark up promoted
interfaces to allow still generating 1.0 + extension specifications
(internal issue 991).
* Platform names, along with corresponding preprocessor symbols to enable
extensions specific to those platforms, are now reserved in vk.xml using
the <platform> tag. Update the registry schema and schema specification
to match (internal issue 1011).
* Updated the <<textures-texel-replacement, Texel Replacement>> section to
clarify that reads from invalid texels for image resources result in
undefined values (internal issue 1014).
* Modify description of patch version so it continues to increment across
minor version changes (internal issue 1033).
* Clarify and unify language describing physical device-level core and
extension functionality in the <<fundamentals-validusage-extensions,
Valid Usage for Extensions>>, <<fundamentals-validusage-versions, Valid
Usage for Newer Core Versions>>, <<initialization-functionpointers
Command Function Pointers>>, <<initialization-phys-dev-extensions,
Extending Physical Device From Device Extensions>>
<<extended-functionality-instance-extensions-and-devices, Instance
Extensions and Device Extensions>> sections and for
flink:vkGetPhysicalDeviceImageFormatProperties2. This documents that
instance-level functionality is tied to the loader, and independent of
the ICD; physical device-level functionality is tied to the ICD, and
associated with device extensions; physical devices are treated more
uniformly between core and extensions; and instance and physical
versions can be different (internal issue 1048).
* Updated the <<commandbuffers-lifecycle, Command Buffer Lifecycle>>
section to clarify the ability for pending command buffers to transition
to the invalid state after submission, and add a command buffer
lifecycle diagram (internal issue 1050).
* Clarify that some flink:VkDescriptorUpdateTemplateCreateInfo parameters
are ignored when push descriptors are not supported (internal issue
1054).
* Specify that flink:vkCreateImage will return an error if the image is
too large, in a NOTE in the slink:VkImageFormatProperties description
(internal issue 1078).
* Remove near-duplicate NOTEs about when to query function pointers
dynamically in the <<initialization, Initialization>> chapter and
replace by extending the NOTE in the <<fundamentals-abi, Application
Binary Interface>> section (internal issue 1085).
* Restore missing references to "`Sparse Resource Features`" in the
flink:VkBufferCreateFlagBits description (internal issue 1086).
* Tidy up definitions of descriptor types in the `GL_KHR_vulkan_glsl`
specification, the <<descriptorsets, Resource Descriptors>> section and
its subsections, and the <<interfaces-resources-descset, Descriptor Set
Interface>> for consistency, reduction of duplicate information, and
removal of GLSL correspondance/examples (internal issue 1090).
* Correctly describe code:PrimitiveId as an Input for tessellation control
and evaluation shaders, not an Output (internal issue 1109).
* Relax the requirements on chroma offsets for nearest filtering in
<<textures-implict-reconstruction, Implicit Reconstruction>> (internal
issue 1116).
Other Issues:
* Clarify the intended relationship between specification language and
certain terms defined in the Khronos Intellectual Property Rights
policy. Specific changes include:
** Rewrote IP/Copyright preamble and introduction to better agree with
normative language both as laid out in the introduction, and the
Khronos IPR policy.
** Added notion of fully informative sections, which are now tagged with
"`(Informative)`" in their titles.
** Removed non-normative uses of the phrase "`not required`"
** Clarified the distinction between terms "`optional`" and "`not
required:`" as they relate to the IPR Policy, and updated specification
text to use terms consistent with the intent.
** Reduced additions to RFC 2119, and ensured the specification agreed
with the leaner language.
** Removed the terms "`hardware`", "`software`", "`CPU`", and "`GPU`" from
normative text.
** Moved several paragraphs that should not have been normative to
informative notes.
** Clarified a number of definitions in the Glossary.
** Updated the document writing guide to match new terminology changes.
* Explicitly state in the <<fundamentals-objectmodel-lifetime-acquire,
application memory lifetime>> language that that for objects other than
descriptor sets, a slink:VkDescriptorSetLayout object used in the
creation of another object (such as slink:VkPipelineLayout or
slink:VkDescriptorUpdateTemplateKHR) is only in use during the creation
of that object and can be safely destroyed afterwards.
* Updated the <<textures-scale-factor, Scale Factor Operation>> section to
use the ratio of anisotropy, rather than the integer sample rate, to
perform the LOD calculation. The spec still allows use of the sample
rate as the value used to calculate the LOD, but no longer requires it.
* Update `vulkan_ext.c` to include all platform-related definitions from
the Vulkan platform headers, following the split of the headers into
platform-specific and non-platform-specific files.
* Fix bogus anchor name in the <<commandbuffers, Command Buffers>> chapter
which accidentally duplicated an anchor in the pipelines chapter. There
were no reference to this anchor, fortunately.
* Add valid usage statement for slink:VkWriteDescriptorSet and
slink:VkCopyDescriptorSet requiring that the slink:VkDescriptorSetLayout
used to allocate the source and destination sets must not have been
destroyed at the time flink:vkUpdateDescriptorSets is called.
* Document mapping of subgroup barrier functions to SPIR-V, and clarify a
place where subgroupBarrier sounds like it's execution-only in the
standalone `GL_KHR_shader_subgroup` specification.
* Use an HTML stylesheet derived from the Asciidoctor `colony` theme, with
the default Arial font family replaced by the sans-serif Noto font
family.
* Numerous minor updates to README.adoc, build scripts, Makefiles, and
registry and style guide specifications to support Vulkan 1.1 outputs,
use them as defaults, and remove mention of `KHX` extensions, which are
no longer supported.
New Extensions:
* `VK_EXT_vertex_attrib_divisor`
2018-03-07 12:18:52 +00:00
emitExtensions = None ,
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
sortProcedure = regSortFeatures ) :
2019-03-17 13:05:46 +00:00
GeneratorOptions . __init__ ( self , conventions , filename , directory , apiname , profile ,
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
versions , emitversions , defaultExtensions ,
Change log for March 7, 2018 Vulkan 1.1.70 spec update:
* Vulkan 1.1 initial release. Bump API patch number and header version
number to 70 for this update. The patch number will be used for both
Vulkan 1.1 and Vulkan 1.0 updates, and continues to increment
continuously from the previous Vulkan 1.0.69 update.
NOTE: We are not publishing an updated 1.0.70 specification, or 1.1
reference pages, along with 1.1.70. There are still minor issues to work
out with those build targets. However, we will soon generate all three
types of documents as part of the regular spec update cycle.
NOTE: The GitHub KhronosGroup/Vulkan-Docs repository now maintains the
current specification in the `master` branch. The `1.0` branch is out of
date and will not be maintained, since we will be generating both 1.1
and 1.0 specifications from the `master` branch in the future.
Github Issues:
* Clarify how mapped memory ranges are flushed in
flink:vkFlushMappedMemoryRanges (public issue 127).
* Specify that <<synchronization-pipeline-stages, Pipeline Stages>> are a
list of tasks that each command performs, rather than necessarily being
discrete pieces of hardware that one task flows through. Add a
"`synchronization command`" pipeline type which all synchronization
command execute (it's just TOP + BOTTOM), with an explanatory note
(public issue 554).
Internal Issues:
* Regenerate all images used in the spec in Inkscape with a consistent
look-and-feel, and adjust image size attributes so they're all legible,
and not too large with respect to the spec body text (internal issue
701).
* Document in the <<extensions,extensions>> appendix and in the style
guide that `KHX` extensions are no longer supported or used in the
Vulkan 1.1 timeframe (internal issue 714).
* Remove the leftover equations_temp directory after PDF build completes
(internal issue 925).
* Update the <<credits, Credits (Informative)>> appendix to include
contributors to Vulkan 1.1, and to list them according to the API
version(s) they contributed to (internal issue 987).
* Add a NOTE to the introduction explaining that interfaces defined by
extensions which were promoted to Vulkan 1.1 are now expressed as
aliases of the Vulkan 1.1 type (internal issue 991).
* Instrument spec source conditionals so spec can be built with 1.1
features, extensions promoted to 1.1, or both (internal issues 992,
998).
* Modify the XML schema and tools to support explicit aliasing of types,
structures, and commands, and use this to express the promotion of 1.0
extensions to 1.1 core features, by making the extension interfaces
aliases of the core features they were promoted to. Mark up promoted
interfaces to allow still generating 1.0 + extension specifications
(internal issue 991).
* Platform names, along with corresponding preprocessor symbols to enable
extensions specific to those platforms, are now reserved in vk.xml using
the <platform> tag. Update the registry schema and schema specification
to match (internal issue 1011).
* Updated the <<textures-texel-replacement, Texel Replacement>> section to
clarify that reads from invalid texels for image resources result in
undefined values (internal issue 1014).
* Modify description of patch version so it continues to increment across
minor version changes (internal issue 1033).
* Clarify and unify language describing physical device-level core and
extension functionality in the <<fundamentals-validusage-extensions,
Valid Usage for Extensions>>, <<fundamentals-validusage-versions, Valid
Usage for Newer Core Versions>>, <<initialization-functionpointers
Command Function Pointers>>, <<initialization-phys-dev-extensions,
Extending Physical Device From Device Extensions>>
<<extended-functionality-instance-extensions-and-devices, Instance
Extensions and Device Extensions>> sections and for
flink:vkGetPhysicalDeviceImageFormatProperties2. This documents that
instance-level functionality is tied to the loader, and independent of
the ICD; physical device-level functionality is tied to the ICD, and
associated with device extensions; physical devices are treated more
uniformly between core and extensions; and instance and physical
versions can be different (internal issue 1048).
* Updated the <<commandbuffers-lifecycle, Command Buffer Lifecycle>>
section to clarify the ability for pending command buffers to transition
to the invalid state after submission, and add a command buffer
lifecycle diagram (internal issue 1050).
* Clarify that some flink:VkDescriptorUpdateTemplateCreateInfo parameters
are ignored when push descriptors are not supported (internal issue
1054).
* Specify that flink:vkCreateImage will return an error if the image is
too large, in a NOTE in the slink:VkImageFormatProperties description
(internal issue 1078).
* Remove near-duplicate NOTEs about when to query function pointers
dynamically in the <<initialization, Initialization>> chapter and
replace by extending the NOTE in the <<fundamentals-abi, Application
Binary Interface>> section (internal issue 1085).
* Restore missing references to "`Sparse Resource Features`" in the
flink:VkBufferCreateFlagBits description (internal issue 1086).
* Tidy up definitions of descriptor types in the `GL_KHR_vulkan_glsl`
specification, the <<descriptorsets, Resource Descriptors>> section and
its subsections, and the <<interfaces-resources-descset, Descriptor Set
Interface>> for consistency, reduction of duplicate information, and
removal of GLSL correspondance/examples (internal issue 1090).
* Correctly describe code:PrimitiveId as an Input for tessellation control
and evaluation shaders, not an Output (internal issue 1109).
* Relax the requirements on chroma offsets for nearest filtering in
<<textures-implict-reconstruction, Implicit Reconstruction>> (internal
issue 1116).
Other Issues:
* Clarify the intended relationship between specification language and
certain terms defined in the Khronos Intellectual Property Rights
policy. Specific changes include:
** Rewrote IP/Copyright preamble and introduction to better agree with
normative language both as laid out in the introduction, and the
Khronos IPR policy.
** Added notion of fully informative sections, which are now tagged with
"`(Informative)`" in their titles.
** Removed non-normative uses of the phrase "`not required`"
** Clarified the distinction between terms "`optional`" and "`not
required:`" as they relate to the IPR Policy, and updated specification
text to use terms consistent with the intent.
** Reduced additions to RFC 2119, and ensured the specification agreed
with the leaner language.
** Removed the terms "`hardware`", "`software`", "`CPU`", and "`GPU`" from
normative text.
** Moved several paragraphs that should not have been normative to
informative notes.
** Clarified a number of definitions in the Glossary.
** Updated the document writing guide to match new terminology changes.
* Explicitly state in the <<fundamentals-objectmodel-lifetime-acquire,
application memory lifetime>> language that that for objects other than
descriptor sets, a slink:VkDescriptorSetLayout object used in the
creation of another object (such as slink:VkPipelineLayout or
slink:VkDescriptorUpdateTemplateKHR) is only in use during the creation
of that object and can be safely destroyed afterwards.
* Updated the <<textures-scale-factor, Scale Factor Operation>> section to
use the ratio of anisotropy, rather than the integer sample rate, to
perform the LOD calculation. The spec still allows use of the sample
rate as the value used to calculate the LOD, but no longer requires it.
* Update `vulkan_ext.c` to include all platform-related definitions from
the Vulkan platform headers, following the split of the headers into
platform-specific and non-platform-specific files.
* Fix bogus anchor name in the <<commandbuffers, Command Buffers>> chapter
which accidentally duplicated an anchor in the pipelines chapter. There
were no reference to this anchor, fortunately.
* Add valid usage statement for slink:VkWriteDescriptorSet and
slink:VkCopyDescriptorSet requiring that the slink:VkDescriptorSetLayout
used to allocate the source and destination sets must not have been
destroyed at the time flink:vkUpdateDescriptorSets is called.
* Document mapping of subgroup barrier functions to SPIR-V, and clarify a
place where subgroupBarrier sounds like it's execution-only in the
standalone `GL_KHR_shader_subgroup` specification.
* Use an HTML stylesheet derived from the Asciidoctor `colony` theme, with
the default Arial font family replaced by the sans-serif Noto font
family.
* Numerous minor updates to README.adoc, build scripts, Makefiles, and
registry and style guide specifications to support Vulkan 1.1 outputs,
use them as defaults, and remove mention of `KHX` extensions, which are
no longer supported.
New Extensions:
* `VK_EXT_vertex_attrib_divisor`
2018-03-07 12:18:52 +00:00
addExtensions , removeExtensions ,
emitExtensions , sortProcedure )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
@total_ordering
class Extension :
def __init__ ( self ,
2019-03-17 13:05:46 +00:00
generator , # needed for logging and API conventions
2018-03-24 20:19:37 +00:00
filename ,
name ,
number ,
2019-03-17 13:05:46 +00:00
ext_type ,
2018-03-24 20:19:37 +00:00
requires ,
requiresCore ,
contact ,
promotedTo ,
deprecatedBy ,
obsoletedBy ,
2018-09-08 22:52:13 +00:00
provisional ,
2018-03-24 20:19:37 +00:00
revision ) :
self . generator = generator
2019-03-17 13:05:46 +00:00
self . conventions = generator . genOpts . conventions
2018-03-24 20:19:37 +00:00
self . filename = filename
self . name = name
self . number = number
2019-03-17 13:05:46 +00:00
self . ext_type = ext_type
2018-03-24 20:19:37 +00:00
self . requires = requires
self . requiresCore = requiresCore
self . contact = contact
self . promotedTo = promotedTo
self . deprecatedBy = deprecatedBy
self . obsoletedBy = obsoletedBy
2018-09-08 22:52:13 +00:00
self . provisional = provisional
2018-03-24 20:19:37 +00:00
self . revision = revision
self . deprecationType = None
2019-03-17 13:05:46 +00:00
self . supercedingAPIVersion = None
2018-03-24 20:19:37 +00:00
self . supercedingExtension = None
if self . promotedTo is not None and self . deprecatedBy is not None and self . obsoletedBy is not None :
self . generator . logMsg ( ' warn ' , ' All \' promotedto \' , \' deprecatedby \' and \' obsoletedby \' attributes used on extension ' + self . name + ' ! Ignoring \' promotedto \' and \' deprecatedby \' . ' )
elif self . promotedTo is not None and self . deprecatedBy is not None :
self . generator . logMsg ( ' warn ' , ' Both \' promotedto \' and \' deprecatedby \' attributes used on extension ' + self . name + ' ! Ignoring \' deprecatedby \' . ' )
elif self . promotedTo is not None and self . obsoletedBy is not None :
self . generator . logMsg ( ' warn ' , ' Both \' promotedto \' and \' obsoletedby \' attributes used on extension ' + self . name + ' ! Ignoring \' promotedto \' . ' )
elif self . deprecatedBy is not None and self . obsoletedBy is not None :
self . generator . logMsg ( ' warn ' , ' Both \' deprecatedby \' and \' obsoletedby \' attributes used on extension ' + self . name + ' ! Ignoring \' deprecatedby \' . ' )
2019-03-17 13:05:46 +00:00
supercededBy = None
2018-03-24 20:19:37 +00:00
if self . promotedTo is not None :
self . deprecationType = ' promotion '
2019-03-17 13:05:46 +00:00
supercededBy = promotedTo
2018-03-24 20:19:37 +00:00
elif self . deprecatedBy is not None :
self . deprecationType = ' deprecation '
2019-03-17 13:05:46 +00:00
supercededBy = deprecatedBy
2018-03-24 20:19:37 +00:00
elif self . obsoletedBy is not None :
self . deprecationType = ' obsoletion '
2019-03-17 13:05:46 +00:00
supercededBy = obsoletedBy
if supercededBy is not None :
if supercededBy == ' ' and not self . deprecationType == ' promotion ' :
pass # supercedingAPIVersion, supercedingExtension is None
elif supercededBy . startswith ( self . conventions . api_version_prefix ) :
self . supercedingAPIVersion = supercededBy
elif supercededBy . startswith ( self . conventions . api_prefix ) :
self . supercedingExtension = supercededBy
2018-03-24 20:19:37 +00:00
else :
2019-03-17 13:05:46 +00:00
self . generator . logMsg ( ' error ' , ' Unrecognized ' + self . deprecationType + ' attribute value \' ' + supercededBy + ' \' ! ' )
2018-03-24 20:19:37 +00:00
2019-03-17 13:05:46 +00:00
def __str__ ( self ) :
return self . name
def __eq__ ( self , other ) :
return self . name == other . name
def __ne__ ( self , other ) :
return self . name != other . name
2018-03-24 20:19:37 +00:00
def __lt__ ( self , other ) :
2019-03-17 13:05:46 +00:00
self_is_KHR = self . name . startswith ( self . conventions . KHR_prefix )
self_is_EXT = self . name . startswith ( self . conventions . EXT_prefix )
other_is_KHR = other . name . startswith ( self . conventions . KHR_prefix )
other_is_EXT = other . name . startswith ( self . conventions . EXT_prefix )
2018-03-24 20:19:37 +00:00
swap = False
2019-03-17 13:05:46 +00:00
if self_is_KHR and not other_is_KHR :
2018-03-24 20:19:37 +00:00
return not swap
2019-03-17 13:05:46 +00:00
if other_is_KHR and not self_is_KHR :
2018-03-24 20:19:37 +00:00
return swap
2019-03-17 13:05:46 +00:00
if self_is_EXT and not other_is_EXT :
2018-03-24 20:19:37 +00:00
return not swap
2019-03-17 13:05:46 +00:00
if other_is_EXT and not self_is_EXT :
2018-03-24 20:19:37 +00:00
return swap
2019-03-17 13:05:46 +00:00
return self . name < other . name
2018-03-24 20:19:37 +00:00
def typeToStr ( self ) :
2019-03-17 13:05:46 +00:00
if self . ext_type == ' instance ' :
2018-03-24 20:19:37 +00:00
return ' Instance extension '
2019-03-17 13:05:46 +00:00
if self . ext_type == ' device ' :
2018-03-24 20:19:37 +00:00
return ' Device extension '
2019-03-17 13:05:46 +00:00
if self . ext_type is not None :
2018-03-24 20:19:37 +00:00
self . generator . logMsg ( ' warn ' , ' The type attribute of ' + self . name + ' extension is neither \' instance \' nor \' device \' . That is invalid (at the time this script was written). ' )
write ( ' ' + type . capitalize ( ) , file = fp )
else : # should be unreachable
self . generator . logMsg ( ' error ' , ' Logic error in typeToStr(): Missing type attribute! ' )
2019-03-17 13:05:46 +00:00
return None
2018-03-24 20:19:37 +00:00
2019-03-17 13:05:46 +00:00
def conditionalLinkCoreAPI ( self , apiVersion , linkSuffix ) :
versionMatch = re . match ( self . conventions . api_version_prefix + r ' ( \ d+)_( \ d+) ' , apiVersion )
2018-03-24 20:19:37 +00:00
major = versionMatch . group ( 1 )
minor = versionMatch . group ( 2 )
dottedVersion = major + ' . ' + minor
2019-03-17 13:05:46 +00:00
doc = ' ifdef:: ' + apiVersion + ' [] \n '
doc + = ' <<versions- ' + dottedVersion + linkSuffix + ' , ' + self . conventions . api_name + ' ' + dottedVersion + ' >> \n '
doc + = ' endif:: ' + apiVersion + ' [] \n '
doc + = ' ifndef:: ' + apiVersion + ' [] \n '
doc + = ' ' + self . conventions . api_name + ' ' + dottedVersion + ' \n '
doc + = ' endif:: ' + apiVersion + ' [] \n '
2018-03-24 20:19:37 +00:00
return doc
def conditionalLinkExt ( self , extName , indent = ' ' ) :
doc = ' ifdef:: ' + extName + ' [] \n '
doc + = indent + ' << ' + extName + ' >> \n '
doc + = ' endif:: ' + extName + ' [] \n '
doc + = ' ifndef:: ' + extName + ' [] \n '
doc + = indent + ' ` ' + extName + ' ` \n '
doc + = ' endif:: ' + extName + ' [] \n '
return doc
def resolveDeprecationChain ( self , extensionsList , succeededBy , file ) :
ext = next ( x for x in extensionsList if x . name == succeededBy )
if ext . deprecationType :
if ext . deprecationType == ' promotion ' :
2019-03-17 13:05:46 +00:00
if ext . supercedingAPIVersion :
write ( ' ** Which in turn was _promoted_ to \n ' + ext . conditionalLinkCoreAPI ( ext . supercedingAPIVersion , ' -promotions ' ) , file = file )
2018-03-24 20:19:37 +00:00
else : # ext.supercedingExtension
write ( ' ** Which in turn was _promoted_ to extension \n ' + ext . conditionalLinkExt ( ext . supercedingExtension ) , file = file )
ext . resolveDeprecationChain ( extensionsList , ext . supercedingExtension , file )
elif ext . deprecationType == ' deprecation ' :
2019-03-17 13:05:46 +00:00
if ext . supercedingAPIVersion :
write ( ' ** Which in turn was _deprecated_ by \n ' + ext . conditionalLinkCoreAPI ( ext . supercedingAPIVersion , ' -new-feature ' ) , file = file )
2018-03-24 20:19:37 +00:00
elif ext . supercedingExtension :
write ( ' ** Which in turn was _deprecated_ by \n ' + ext . conditionalLinkExt ( ext . supercedingExtension ) + ' extension ' , file = file )
ext . resolveDeprecationChain ( extensionsList , ext . supercedingExtension , file )
else :
write ( ' ** Which in turn was _deprecated_ without replacement ' , file = file )
elif ext . deprecationType == ' obsoletion ' :
2019-03-17 13:05:46 +00:00
if ext . supercedingAPIVersion :
write ( ' ** Which in turn was _obsoleted_ by \n ' + ext . conditionalLinkCoreAPI ( ext . supercedingAPIVersion , ' -new-feature ' ) , file = file )
2018-03-24 20:19:37 +00:00
elif ext . supercedingExtension :
write ( ' ** Which in turn was _obsoleted_ by \n ' + ext . conditionalLinkExt ( ext . supercedingExtension ) + ' extension ' , file = file )
ext . resolveDeprecationChain ( extensionsList , ext . supercedingExtension , file )
else :
write ( ' ** Which in turn was _obsoleted_ without replacement ' , file = file )
else : # should be unreachable
self . generator . logMsg ( ' error ' , ' Logic error in resolveDeprecationChain(): deprecationType is neither \' promotion \' , \' deprecation \' nor \' obsoletion \' ! ' )
def makeMetafile ( self , extensionsList ) :
fp = self . generator . newFile ( self . filename )
write ( ' [[ ' + self . name + ' ]] ' , file = fp )
write ( ' === ' + self . name , file = fp )
write ( ' ' , file = fp )
write ( ' *Name String*:: ' , file = fp )
write ( ' ` ' + self . name + ' ` ' , file = fp )
write ( ' *Extension Type*:: ' , file = fp )
write ( ' ' + self . typeToStr ( ) , file = fp )
write ( ' *Registered Extension Number*:: ' , file = fp )
write ( ' ' + self . number , file = fp )
write ( ' *Revision*:: ' , file = fp )
write ( ' ' + self . revision , file = fp )
2019-03-17 13:05:46 +00:00
# Only API extension dependencies are coded in XML, others are explicit
2018-03-24 20:19:37 +00:00
write ( ' *Extension and Version Dependencies*:: ' , file = fp )
2019-03-17 13:05:46 +00:00
write ( ' * Requires ' + self . conventions . api_name + ' ' + self . requiresCore , file = fp )
2018-03-24 20:19:37 +00:00
if self . requires :
for dep in self . requires . split ( ' , ' ) :
write ( ' * Requires `<< ' + dep + ' >>` ' , file = fp )
if self . deprecationType :
write ( ' *Deprecation state*:: ' , file = fp )
if self . deprecationType == ' promotion ' :
2019-03-17 13:05:46 +00:00
if self . supercedingAPIVersion :
write ( ' * _Promoted_ to \n ' + self . conditionalLinkCoreAPI ( self . supercedingAPIVersion , ' -promotions ' ) , file = fp )
2018-03-24 20:19:37 +00:00
else : # ext.supercedingExtension
write ( ' * _Promoted_ to \n ' + self . conditionalLinkExt ( self . supercedingExtension ) + ' extension ' , file = fp )
self . resolveDeprecationChain ( extensionsList , self . supercedingExtension , fp )
elif self . deprecationType == ' deprecation ' :
2019-03-17 13:05:46 +00:00
if self . supercedingAPIVersion :
write ( ' * _Deprecated_ by \n ' + self . conditionalLinkCoreAPI ( self . supercedingAPIVersion , ' -new-features ' ) , file = fp )
2018-03-24 20:19:37 +00:00
elif self . supercedingExtension :
write ( ' * _Deprecated_ by \n ' + self . conditionalLinkExt ( self . supercedingExtension ) + ' extension ' , file = fp )
self . resolveDeprecationChain ( extensionsList , self . supercedingExtension , fp )
else :
write ( ' * _Deprecated_ without replacement ' , file = fp )
elif self . deprecationType == ' obsoletion ' :
2019-03-17 13:05:46 +00:00
if self . supercedingAPIVersion :
write ( ' * _Obsoleted_ by \n ' + self . conditionalLinkCoreAPI ( self . supercedingAPIVersion , ' -new-features ' ) , file = fp )
2018-03-24 20:19:37 +00:00
elif self . supercedingExtension :
write ( ' * _Obsoleted_ by \n ' + self . conditionalLinkExt ( self . supercedingExtension ) + ' extension ' , file = fp )
self . resolveDeprecationChain ( extensionsList , self . supercedingExtension , fp )
else :
# TODO: Does not make sense to retroactively ban use of extensions from 1.0.
# Needs some tweaks to the semantics and this message, when such extension(s) occur.
write ( ' * _Obsoleted_ without replacement ' , file = fp )
else : # should be unreachable
self . generator . logMsg ( ' error ' , ' Logic error in makeMetafile(): deprecationType is neither \' promotion \' , \' deprecation \' nor \' obsoletion \' ! ' )
2019-03-17 13:05:46 +00:00
if self . conventions . write_contacts :
write ( ' *Contact*:: ' , file = fp )
contacts = self . contact . split ( ' , ' )
for contact in contacts :
contactWords = contact . strip ( ) . split ( )
name = ' ' . join ( contactWords [ : - 1 ] )
handle = contactWords [ - 1 ]
if handle . startswith ( ' gitlab: ' ) :
prettyHandle = ' icon:gitlab[alt=GitLab, role= " red " ] ' + handle . replace ( ' gitlab:@ ' , ' ' )
elif handle . startswith ( ' @ ' ) :
trackerLink = ' link:++https://github.com/KhronosGroup/Vulkan-Docs/issues/new?title= ' + self . name + ' : % 20&body= ' + handle + ' % 20++ '
prettyHandle = trackerLink + ' [icon:github[alt=GitHub, role= " black " ] ' + handle [ 1 : ] + ' ] '
else :
prettyHandle = handle
write ( ' * ' + name + ' ' + prettyHandle , file = fp )
fp . close ( )
if self . conventions . write_refpage_include :
# Now make the refpage include
fp = self . generator . newFile ( self . filename . replace ( ' meta/ ' , ' meta/refpage. ' ) )
write ( ' == Registered Extension Number ' , file = fp )
write ( self . number , file = fp )
write ( ' ' , file = fp )
write ( ' == Revision ' , file = fp )
write ( self . revision , file = fp )
write ( ' ' , file = fp )
# Only API extension dependencies are coded in XML, others are explicit
write ( ' == Extension and Version Dependencies ' , file = fp )
write ( ' * Requires ' + self . conventions . api_name + ' ' + self . requiresCore , file = fp )
if self . requires :
for dep in self . requires . split ( ' , ' ) :
write ( ' * Requires `<< ' + dep + ' >>` ' , file = fp )
write ( ' ' , file = fp )
if self . deprecationType :
write ( ' == Deprecation state ' , file = fp )
if self . deprecationType == ' promotion ' :
if self . supercedingAPIVersion :
write ( ' * _Promoted_ to \n ' + self . conditionalLinkCoreAPI ( self . supercedingAPIVersion , ' -promotions ' ) , file = fp )
else : # ext.supercedingExtension
write ( ' * _Promoted_ to \n ' + self . conditionalLinkExt ( self . supercedingExtension ) + ' extension ' , file = fp )
self . resolveDeprecationChain ( extensionsList , self . supercedingExtension , fp )
elif self . deprecationType == ' deprecation ' :
if self . supercedingAPIVersion :
write ( ' * _Deprecated_ by \n ' + self . conditionalLinkCoreAPI ( self . supercedingAPIVersion , ' -new-features ' ) , file = fp )
elif self . supercedingExtension :
write ( ' * _Deprecated_ by \n ' + self . conditionalLinkExt ( self . supercedingExtension ) + ' extension ' , file = fp )
self . resolveDeprecationChain ( extensionsList , self . supercedingExtension , fp )
else :
write ( ' * _Deprecated_ without replacement ' , file = fp )
elif self . deprecationType == ' obsoletion ' :
if self . supercedingAPIVersion :
write ( ' * _Obsoleted_ by \n ' + self . conditionalLinkCoreAPI ( self . supercedingAPIVersion , ' -new-features ' ) , file = fp )
elif self . supercedingExtension :
write ( ' * _Obsoleted_ by \n ' + self . conditionalLinkExt ( self . supercedingExtension ) + ' extension ' , file = fp )
self . resolveDeprecationChain ( extensionsList , self . supercedingExtension , fp )
else :
# TODO: Does not make sense to retroactively ban use of extensions from 1.0.
# Needs some tweaks to the semantics and this message, when such extension(s) occur.
write ( ' * _Obsoleted_ without replacement ' , file = fp )
else : # should be unreachable
self . generator . logMsg ( ' error ' , ' Logic error in makeMetafile(): deprecationType is neither \' promotion \' , \' deprecation \' nor \' obsoletion \' ! ' )
write ( ' ' , file = fp )
fp . close ( )
2018-03-24 20:19:37 +00:00
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
# ExtensionMetaDocOutputGenerator - subclass of OutputGenerator.
2019-03-17 13:05:46 +00:00
# Generates AsciiDoc includes with metainformation for the API extension
# appendices. The fields used from <extension> tags in the API XML are:
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
#
2018-03-24 20:19:37 +00:00
# name extension name string
# number extension number (optional)
# contact name and github login or email address (optional)
# type 'instance' | 'device' (optional)
2019-03-17 13:05:46 +00:00
# requires list of comma-separated required API extensions (optional)
# requiresCore required core version of API (optional)
# promotedTo extension or API version it was promoted to
# deprecatedBy extension or API version which deprecated this extension,
# or empty string if deprecated without replacement
# obsoletedBy extension or API version which obsoleted this extension,
# or empty string if obsoleted without replacement
2018-09-08 22:52:13 +00:00
# provisional 'true' if this extension is released provisionally
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
#
# ---- methods ----
# ExtensionMetaDocOutputGenerator(errFile, warnFile, diagFile) - args as for
# OutputGenerator. Defines additional internal state.
# ---- methods overriding base class ----
# beginFile(genOpts)
# endFile()
# beginFeature(interface, emit)
# endFeature()
class ExtensionMetaDocOutputGenerator ( OutputGenerator ) :
""" Generate specified API interfaces in a specific style, such as a C header """
def __init__ ( self ,
errFile = sys . stderr ,
warnFile = sys . stderr ,
diagFile = sys . stdout ) :
OutputGenerator . __init__ ( self , errFile , warnFile , diagFile )
2018-03-24 20:19:37 +00:00
self . extensions = [ ]
2019-03-17 13:05:46 +00:00
# List of strings containing all vendor tags
self . vendor_tags = [ ]
self . file_suffix = ' '
2018-03-24 20:19:37 +00:00
def newFile ( self , filename ) :
self . logMsg ( ' diag ' , ' # Generating include file: ' , filename )
fp = open ( filename , ' w ' , encoding = ' utf-8 ' )
2019-03-17 13:05:46 +00:00
write ( self . genOpts . conventions . warning_comment , file = fp )
2018-03-24 20:19:37 +00:00
return fp
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
def beginFile ( self , genOpts ) :
OutputGenerator . beginFile ( self , genOpts )
2018-03-24 20:19:37 +00:00
self . directory = self . genOpts . directory
2019-03-17 13:05:46 +00:00
self . file_suffix = self . genOpts . conventions . file_suffix
# Iterate over all 'tag' Elements and add the names of all the valid vendor
# tags to the list
root = self . registry . tree . getroot ( )
for tag in root . findall ( ' tags/tag ' ) :
self . vendor_tags . append ( tag . get ( ' name ' ) )
2018-03-24 20:19:37 +00:00
# Create subdirectory, if needed
self . makeDir ( self . directory )
def conditionalExt ( self , extName , content , ifdef = None , condition = None ) :
doc = ' '
innerdoc = ' ifdef:: ' + extName + ' [] \n '
innerdoc + = content + ' \n '
innerdoc + = ' endif:: ' + extName + ' [] \n '
if ifdef :
if ifdef == ' ifndef ' :
2018-07-23 13:40:30 +00:00
if condition :
2018-07-23 09:15:08 +00:00
doc + = ' ifndef:: ' + condition + ' [] \n '
doc + = innerdoc
doc + = ' endif:: ' + condition + ' [] \n '
2018-07-23 13:40:30 +00:00
else : # no condition is as if condition is defined; "nothing" is always defined :p
pass # so no output
2018-03-24 20:19:37 +00:00
elif ifdef == ' ifdef ' :
2018-07-23 13:40:30 +00:00
if condition :
2018-07-23 09:15:08 +00:00
doc + = ' ifdef:: ' + condition + ' + ' + extName + ' [] \n '
2018-07-23 13:40:30 +00:00
doc + = content + ' \n ' # does not include innerdoc; the ifdef was merged with the one above
2018-07-23 09:15:08 +00:00
doc + = ' endif:: ' + condition + ' + ' + extName + ' [] \n '
2018-07-23 13:40:30 +00:00
else : # no condition is as if condition is defined; "nothing" is always defined :p
doc + = innerdoc
2018-03-24 20:19:37 +00:00
else : # should be unreachable
self . generator . logMsg ( ' error ' , ' Logic error in conditionalExt(): ifdef is neither \' ifdef \' nor \' ifndef \' ! ' )
else :
doc + = innerdoc
return doc
2019-03-17 13:05:46 +00:00
def outputExtensionInclude ( self , name , vendor , deprecation_type , conditions , current_fp , current_toc_fp , deprecated_fp , deprecated_toc_fp , guard_fp ) :
include = ' include::../ ' + vendor . lower ( ) + ' / ' + name [ 3 : ] . lower ( ) + ' ' + self . file_suffix + ' [] '
link = ' * << ' + name + ' >> '
if deprecation_type is None :
write ( self . conditionalExt ( name , include ) , file = current_fp )
write ( self . conditionalExt ( name , link ) , file = current_toc_fp )
else :
write ( self . conditionalExt ( name , include , ' ifndef ' , conditions ) , file = current_fp )
write ( self . conditionalExt ( name , link , ' ifndef ' , conditions ) , file = current_toc_fp )
write ( self . conditionalExt ( name , include , ' ifdef ' , conditions ) , file = deprecated_fp )
write ( self . conditionalExt ( name , link , ' ifdef ' , conditions ) , file = deprecated_toc_fp )
write ( self . conditionalExt ( name , ' :HAS_DEPRECATED_EXTENSIONS: ' , ' ifdef ' , conditions ) , file = guard_fp )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
def endFile ( self ) :
2018-03-24 20:19:37 +00:00
self . extensions . sort ( )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
for ext in self . extensions :
ext . makeMetafile ( self . extensions )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
promotedExtensions = { }
for ext in self . extensions :
2019-03-17 13:05:46 +00:00
if ext . deprecationType == ' promotion ' and ext . supercedingAPIVersion :
promotedExtensions . setdefault ( ext . supercedingAPIVersion , [ ] ) . append ( ext )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
for coreVersion , extensions in promotedExtensions . items ( ) :
2019-03-17 13:05:46 +00:00
promoted_extensions_fp = self . newFile ( self . directory + ' /promoted_extensions_ ' + coreVersion + self . file_suffix )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
for ext in extensions :
indent = ' '
write ( ' * {blank} \n + \n ' + ext . conditionalLinkExt ( ext . name , indent ) , file = promoted_extensions_fp )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
promoted_extensions_fp . close ( )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2019-03-17 13:05:46 +00:00
current_extensions_appendix_fp = self . newFile ( self . directory + ' /current_extensions_appendix ' + self . file_suffix )
deprecated_extensions_appendix_fp = self . newFile ( self . directory + ' /deprecated_extensions_appendix ' + self . file_suffix )
current_extension_appendices_fp = self . newFile ( self . directory + ' /current_extension_appendices ' + self . file_suffix )
current_extension_appendices_toc_fp = self . newFile ( self . directory + ' /current_extension_appendices_toc ' + self . file_suffix )
deprecated_extension_appendices_fp = self . newFile ( self . directory + ' /deprecated_extension_appendices ' + self . file_suffix )
deprecated_extension_appendices_toc_fp = self . newFile ( self . directory + ' /deprecated_extension_appendices_toc ' + self . file_suffix )
deprecated_extensions_guard_macro_fp = self . newFile ( self . directory + ' /deprecated_extensions_guard_macro ' + self . file_suffix )
provisional_extensions_appendix_fp = self . newFile ( self . directory + ' /provisional_extensions_appendix ' + self . file_suffix )
provisional_extension_appendices_fp = self . newFile ( self . directory + ' /provisional_extension_appendices ' + self . file_suffix )
provisional_extension_appendices_toc_fp = self . newFile ( self . directory + ' /provisional_extension_appendices_toc ' + self . file_suffix )
provisional_extensions_guard_macro_fp = self . newFile ( self . directory + ' /provisional_extensions_guard_macro ' + self . file_suffix )
write ( ' include::deprecated_extensions_guard_macro ' + self . file_suffix + ' [] ' , file = current_extensions_appendix_fp )
2018-03-24 20:19:37 +00:00
write ( ' ' , file = current_extensions_appendix_fp )
write ( ' ifndef::HAS_DEPRECATED_EXTENSIONS[] ' , file = current_extensions_appendix_fp )
write ( ' [[extension-appendices-list]] ' , file = current_extensions_appendix_fp )
write ( ' == List of Extensions ' , file = current_extensions_appendix_fp )
write ( ' endif::HAS_DEPRECATED_EXTENSIONS[] ' , file = current_extensions_appendix_fp )
write ( ' ifdef::HAS_DEPRECATED_EXTENSIONS[] ' , file = current_extensions_appendix_fp )
write ( ' [[extension-appendices-list]] ' , file = current_extensions_appendix_fp )
write ( ' == List of Current Extensions ' , file = current_extensions_appendix_fp )
write ( ' endif::HAS_DEPRECATED_EXTENSIONS[] ' , file = current_extensions_appendix_fp )
write ( ' ' , file = current_extensions_appendix_fp )
2019-03-17 13:05:46 +00:00
write ( ' include::current_extension_appendices_toc ' + self . file_suffix + ' [] ' , file = current_extensions_appendix_fp )
2018-03-24 20:19:37 +00:00
write ( ' <<< ' , file = current_extensions_appendix_fp )
2019-03-17 13:05:46 +00:00
write ( ' include::current_extension_appendices ' + self . file_suffix + ' [] ' , file = current_extensions_appendix_fp )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2019-03-17 13:05:46 +00:00
write ( ' include::deprecated_extensions_guard_macro ' + self . file_suffix + ' [] ' , file = deprecated_extensions_appendix_fp )
2018-03-24 20:19:37 +00:00
write ( ' ' , file = deprecated_extensions_appendix_fp )
write ( ' ifdef::HAS_DEPRECATED_EXTENSIONS[] ' , file = deprecated_extensions_appendix_fp )
write ( ' [[deprecated-extension-appendices-list]] ' , file = deprecated_extensions_appendix_fp )
write ( ' == List of Deprecated Extensions ' , file = deprecated_extensions_appendix_fp )
2019-03-17 13:05:46 +00:00
write ( ' include::deprecated_extension_appendices_toc ' + self . file_suffix + ' [] ' , file = deprecated_extensions_appendix_fp )
2018-03-24 20:19:37 +00:00
write ( ' <<< ' , file = deprecated_extensions_appendix_fp )
2019-03-17 13:05:46 +00:00
write ( ' include::deprecated_extension_appendices ' + self . file_suffix + ' [] ' , file = deprecated_extensions_appendix_fp )
2018-03-24 20:19:37 +00:00
write ( ' endif::HAS_DEPRECATED_EXTENSIONS[] ' , file = deprecated_extensions_appendix_fp )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
# add include guard to allow multiple includes
write ( ' ifndef::DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[] ' , file = deprecated_extensions_guard_macro_fp )
write ( ' :DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD: \n ' , file = deprecated_extensions_guard_macro_fp )
2018-09-08 22:52:13 +00:00
write ( ' ifndef::PROVISIONAL_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[] ' , file = provisional_extensions_guard_macro_fp )
write ( ' :PROVISIONAL_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD: \n ' , file = provisional_extensions_guard_macro_fp )
2019-03-17 13:05:46 +00:00
write ( ' include::provisional_extensions_guard_macro ' + self . file_suffix + ' [] ' , file = provisional_extensions_appendix_fp )
2018-09-08 22:52:13 +00:00
write ( ' ' , file = provisional_extensions_appendix_fp )
write ( ' ifdef::HAS_PROVISIONAL_EXTENSIONS[] ' , file = provisional_extensions_appendix_fp )
write ( ' [[provisional-extension-appendices-list]] ' , file = provisional_extensions_appendix_fp )
write ( ' == List of Provisional Extensions ' , file = provisional_extensions_appendix_fp )
2019-03-17 13:05:46 +00:00
write ( ' include::provisional_extension_appendices_toc ' + self . file_suffix + ' [] ' , file = provisional_extensions_appendix_fp )
2018-09-08 22:52:13 +00:00
write ( ' <<< ' , file = provisional_extensions_appendix_fp )
2019-03-17 13:05:46 +00:00
write ( ' include::provisional_extension_appendices ' + self . file_suffix + ' [] ' , file = provisional_extensions_appendix_fp )
2018-09-08 22:52:13 +00:00
write ( ' endif::HAS_PROVISIONAL_EXTENSIONS[] ' , file = provisional_extensions_appendix_fp )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
for ext in self . extensions :
2019-03-17 13:05:46 +00:00
include = ' include::../ ' + ext . name + self . file_suffix + ' [] '
2018-03-24 20:19:37 +00:00
link = ' * << ' + ext . name + ' >> '
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-09-08 22:52:13 +00:00
if ext . provisional == ' true ' :
write ( self . conditionalExt ( ext . name , include ) , file = provisional_extension_appendices_fp )
write ( self . conditionalExt ( ext . name , link ) , file = provisional_extension_appendices_toc_fp )
write ( self . conditionalExt ( ext . name , ' :HAS_PROVISIONAL_EXTENSIONS: ' ) , file = provisional_extensions_guard_macro_fp )
elif ext . deprecationType is None :
2018-03-24 20:19:37 +00:00
write ( self . conditionalExt ( ext . name , include ) , file = current_extension_appendices_fp )
write ( self . conditionalExt ( ext . name , link ) , file = current_extension_appendices_toc_fp )
else :
2019-03-17 13:05:46 +00:00
condition = ext . supercedingAPIVersion if ext . supercedingAPIVersion else ext . supercedingExtension # potentially None too
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
write ( self . conditionalExt ( ext . name , include , ' ifndef ' , condition ) , file = current_extension_appendices_fp )
write ( self . conditionalExt ( ext . name , link , ' ifndef ' , condition ) , file = current_extension_appendices_toc_fp )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
2018-03-24 20:19:37 +00:00
write ( self . conditionalExt ( ext . name , include , ' ifdef ' , condition ) , file = deprecated_extension_appendices_fp )
write ( self . conditionalExt ( ext . name , link , ' ifdef ' , condition ) , file = deprecated_extension_appendices_toc_fp )
write ( self . conditionalExt ( ext . name , ' :HAS_DEPRECATED_EXTENSIONS: ' , ' ifdef ' , condition ) , file = deprecated_extensions_guard_macro_fp )
current_extensions_appendix_fp . close ( )
deprecated_extensions_appendix_fp . close ( )
current_extension_appendices_fp . close ( )
current_extension_appendices_toc_fp . close ( )
deprecated_extension_appendices_fp . close ( )
deprecated_extension_appendices_toc_fp . close ( )
write ( ' endif::DEPRECATED_EXTENSIONS_GUARD_MACRO_INCLUDE_GUARD[] ' , file = deprecated_extensions_guard_macro_fp )
deprecated_extensions_guard_macro_fp . close ( )
OutputGenerator . endFile ( self )
def beginFeature ( self , interface , emit ) :
# Start processing in superclass
OutputGenerator . beginFeature ( self , interface , emit )
if interface . tag != ' extension ' :
self . logMsg ( ' diag ' , ' beginFeature: ignoring non-extension feature ' , self . featureName )
return
# These attributes must exist
name = self . featureName
number = self . getAttrib ( interface , ' number ' )
2019-03-17 13:05:46 +00:00
ext_type = self . getAttrib ( interface , ' type ' )
2018-03-24 20:19:37 +00:00
revision = self . getSpecVersion ( interface , name )
# These attributes are optional
OPTIONAL = False
requires = self . getAttrib ( interface , ' requires ' , OPTIONAL )
requiresCore = self . getAttrib ( interface , ' requiresCore ' , OPTIONAL , ' 1.0 ' )
contact = self . getAttrib ( interface , ' contact ' , OPTIONAL )
promotedTo = self . getAttrib ( interface , ' promotedto ' , OPTIONAL )
deprecatedBy = self . getAttrib ( interface , ' deprecatedby ' , OPTIONAL )
obsoletedBy = self . getAttrib ( interface , ' obsoletedby ' , OPTIONAL )
2018-09-08 22:52:13 +00:00
provisional = self . getAttrib ( interface , ' provisional ' , OPTIONAL , ' false ' )
2018-03-24 20:19:37 +00:00
2019-03-17 13:05:46 +00:00
filename = self . directory + ' / ' + name + self . file_suffix
2018-03-24 20:19:37 +00:00
2019-03-17 13:05:46 +00:00
self . extensions . append ( Extension ( self , filename , name , number , ext_type , requires , requiresCore , contact , promotedTo , deprecatedBy , obsoletedBy , provisional , revision ) )
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
def endFeature ( self ) :
# Finish processing in superclass
OutputGenerator . endFeature ( self )
2018-03-24 20:19:37 +00:00
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
# Query an attribute from an element, or return a default value
# elem - element to query
# attribute - attribute name
2018-03-24 20:19:37 +00:00
# required - whether attribute must exist
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
# default - default value if attribute not present
2018-03-24 20:19:37 +00:00
def getAttrib ( self , elem , attribute , required = True , default = None ) :
2019-03-17 13:05:46 +00:00
attrib = elem . get ( attribute , default )
if required and ( attrib is None ) :
name = elem . get ( ' name ' , ' UNKNOWN ' )
self . logMsg ( ' error ' , ' While processing \' ' + self . featureName + ' , < ' + elem . tag + ' > \' ' + name + ' \' does not contain required attribute \' ' + attribute + ' \' ' )
return attrib
2018-03-24 20:19:37 +00:00
def numbersToWords ( self , name ) :
whitelist = [ ' WIN32 ' , ' INT16 ' ]
# temporarily replace whitelist items
for i , w in enumerate ( whitelist ) :
name = re . sub ( w , ' { ' + str ( i ) + ' } ' , name )
name = re . sub ( r ' (?<=[A-Z])( \ d+)(?![A-Z]) ' , ' _ \ g<1> ' , name )
# undo whitelist substitution
for i , w in enumerate ( whitelist ) :
name = re . sub ( ' \\ { ' + str ( i ) + ' } ' , w , name )
return name
Change log for September 5, 2017 Vulkan 1.0.60 spec update:
* Bump API patch number and header version number to 60 for this update.
Github Issues:
* Document that <<queries-timestamps, Timestamp Queries>> can only be
meaningfully compared when they are written from the same queue (public
issue 216).
* Document that the `<extension>` tag `type` attribute is required for
non-disabled extensions (derived from, but does not close public issue
354).
* Clean up registry schema length attribute descriptions to be consistent
and correct (public issue 555).
Internal Issues:
* Replace as much of the hand-written extension appendix metadata as
possible with asciidoc includes generated from corresponding attributes
of +vk.xml+, and enhance the style guide to match. This avoids
inconsistencies between +vk.xml+ and the appendices, and produces a more
uniform style (internal issue 137).
* Remove the generated extDependency.{py,sh} files from the tree and
create them dynamically on demand instead, reducing merge conflicts
(internal issue 713).
* Add a prototype tool for generating in-place difference markup for
sections guarded by asciidoc conditionals, and new syntax for open
blocks to support it (internal issue 833).
* Remove unnecessary restriction of etext:*SYNC_FD_BIT_KHR external handle
types to the same physical device in the
slink:VkPhysicalDeviceIDPropertiesKHR,
flink:VkImportMemoryWin32HandleInfoKHR,
slink:VkImportFenceWin32HandleInfoKHR, slink:VkImportFenceFdInfoKHR,
slink:VkImportSemaphoreWin32HandleInfoKHR,
slink:VkImportSemaphoreFdInfoKHR
<<external-memory-handle-types-compatibility, External memory handle
types compatibility>>, <<external-semaphore-handle-types-compatibility,
External semaphore handle types compatibility>>, and
<<external-fence-handle-types-compatibility, External fence handle types
compatibility>> sections (internal issue 956).
Other Issues:
* Remove dependency of +VK_KHX_device_group+ on +VK_KHR_swapchain+ (there
is an interaction, but not a strict dependency), and add a new
`extension` attribute to the `<require` XML tag to allow classifying a
subset of interfaces of an extension as requiring another extension.
Update the registry schema and documentation accordingly.
New Extensions:
* `VK_AMD_shader_fragment_mask` (and related `GL_AMD_shader_fragment_mask`
GLSL extension)
* `VK_EXT_sample_locations`
* `VK_EXT_validation_cache`
2017-09-04 10:06:55 +00:00
#
# Determine the extension revision from the EXTENSION_NAME_SPEC_VERSION
# enumerant.
#
# elem - <extension> element to query
# extname - extension name from the <extension> 'name' attribute
# default - default value if SPEC_VERSION token not present
def getSpecVersion ( self , elem , extname , default = None ) :
# The literal enumerant name to match
2018-03-24 20:19:37 +00:00
versioningEnumName = self . numbersToWords ( extname . upper ( ) ) + ' _SPEC_VERSION '
for enum in elem . findall ( ' ./require/enum ' ) :
enumName = self . getAttrib ( enum , ' name ' )
if enumName == versioningEnumName :
return self . getAttrib ( enum , ' value ' )
#if not found:
for enum in elem . findall ( ' ./require/enum ' ) :
enumName = self . getAttrib ( enum , ' name ' )
if enumName . find ( ' SPEC_VERSION ' ) != - 1 :
2018-08-13 13:23:03 +00:00
self . logMsg ( ' diag ' , ' Missing ' + versioningEnumName + ' ! Potential misnamed candidate ' + enumName + ' . ' )
2018-03-24 20:19:37 +00:00
return self . getAttrib ( enum , ' value ' )
self . logMsg ( ' error ' , ' Missing ' + versioningEnumName + ' ! ' )
2019-03-17 13:05:46 +00:00
return default