Vulkan-Docs/genspec.py
Jon Leech 56e0289318 Change log for January 05, 2019 Vulkan 1.1.97 spec update:
* Update release number to 97.

Public Issues:

  * Add a special case to the <<renderpass-compatibility, Render Pass
    Compatibility>> rules allowing single-subpass renderpasses to be
    compatible even if they have different resolve attachment references
    (public issue 835).
  * Fix the miss shader binding table record address rule in the
    <<shader-binding-table-indexing-rules, Miss Shaders>> section to index
    by code:missIndex, not code:sbtOffset (public issue 875).

Internal Issues:

  * Add a missing anchor to the elink:VkSamplerCreateFlagBits language
    (internal issue 1483).
  * Add missing implicit valid usage include for slink:VkHdrMetadataEXT and
    corresponding `noautovalidity` attributes in `vk.xml` for the
    externally-defined metadata properties (internal issue 1514).
  * Remove restrictions on the `mask` parameter of SPIR-V's
    code:OpGroupNonUniformXor in the <<spirvenv-module-validation,
    Validation Rules within a Module>> appendix (internal merge request
    2971).
  * Restore `noautovalidity` attribute for
    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:pViewportWScalings
    in `vk.xml` (internal merge request 2975).
  * Update copyright dates on Khronos-copyrighted files to 2019 (internal
    merge request 2980).

New Extensions:

  * `VK_KHR_depth_stencil_resolve`
  * `VK_EXT_buffer_device_address`
  * `VK_EXT_memory_budget`
  * `VK_EXT_memory_priority`
  * `VK_EXT_validation_features`
2019-01-05 19:40:12 -08:00

167 lines
5.9 KiB
Python

#!/usr/bin/python3
#
# Copyright (c) 2016-2019 The Khronos Group Inc.
#
# 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.
import time
from datetime import timedelta, date
# This script builds a full release package including XHTML and PDF
# versions of the specification, including an optional list of
# extensions. Other files in the release directory are removed,
#including man pages, XHTML chunked, HTML, validity output, etc.
# The current branch must be fully committed and up to date when the
# script is run, with no outstanding un-added / un-committed files.
# After completing the build, suggestions for creating tags are made.
# Return the Vulkan release number, used for tags
def releaseNum():
return '$REVISION'
# Return a date for the current, or upcoming if not already, Friday,
# which is when releases happen
def buildOnFriday():
today = date.today()
friday = today + timedelta((4 - today.weekday()) % 7)
return friday
# label = textual label to use for target being generated
# versions = list of core API versions to include
# extensions = list of extension names to include
# ratified = True if this is a ratified spec (one built without non-KHR
# extensions)
# outdir = directory to generate specs in
# apititle = extra title to apply to the specification
# xmlDir = directory containing registry XML
# xmlTargets = targets to build in xml/
# specDir = directory containing spec source & Makefile
# specTargets = targets to build
# miscSrc = path to copy misc files from, if non-None
# miscDst = path to copy misc files to, if non-None
# needRefSources = True if ref pages must be extracted from the spec sources
def buildRelease(label,
versions,
extensions,
ratified,
outdir,
apititle,
xmlDir, xmlTargets,
specDir, specTargets,
miscSrc = None, miscDst = None, needRefSources = False):
print('echo Info: Generating target=' + label,
'outdir=' + outdir)
outarg = 'OUTDIR=' + outdir
if (versions != None and len(versions) > 0):
versarg = 'VERSIONS="' + ' '.join(versions) + '"'
else:
versarg = ''
if (extensions != None and len(extensions) > 0):
extarg = 'EXTENSIONS="' + ' '.join(extensions) + '"'
else:
extarg = ''
if ratified:
ratifiedarg = 'EXTRAATTRIBS="-a ratified_core_spec"'
else:
ratifiedarg = ''
if (apititle != None):
titlearg = 'APITITLE="' + apititle + '"'
else:
titlearg = ''
# print('echo Info: Creating directory and cleaning spec in', outdir)
print('mkdir -p', outdir)
print('(cd ', outdir, '&& rm -rf',
'html chunked pdf',
'man config checks',
'vkspec.html styleguide.html apispec.html apispec.pdf registry.html',
')')
# print('echo Info: Generating headers and spec include files')
print('cd', xmlDir)
print('make', outarg, xmlTargets)
# print('echo Info: Generating ref pages sources and spec targets')
print('cd', specDir)
print('make', outarg, 'clean')
# This is a temporary workaround for a dependency bug - if any of the
# specTargets require ref page sources, and they aren't already present
# at the time the make is invoked, that target will not be built.
if needRefSources:
print('make', outarg, versarg, extarg, 'man/apispec.txt')
# Now make the actual targets.
print('make -O -k -j 8',
outarg, versarg, extarg, ratifiedarg, titlearg,
'NOTEOPTS="-a implementation-guide"',
specTargets)
if (miscSrc != None and miscDst != None):
print('mkdir -p', miscDst)
print('cp', miscSrc + '/*.txt', miscDst + '/')
print('')
# Build all target documents
# repoDir = path to the Vulkan git repo containing the specs
# outDir = path to the output base directory in which targets are generated
def buildBranch(targetDir,
versions,
extensions,
ratified,
apititle,
xmlTargets,
specTargets,
repoDir,
outDir,
needRefSources = False):
# Directory with vk.xml and generation tools
xmlDir = repoDir + '/xml'
# Directory with spec sources
specDir = repoDir
# Directory containing misc. files to copy to registry.
# At present there are none, since GLSL extensions have moved to the
# GLSL repository and are redirected from the Vulkan registy website.
# These should be relative to repoDir and outDir, respectively
miscSrc = None
miscDst = None
buildRelease(targetDir,
versions,
extensions,
ratified,
outDir + '/' + targetDir,
apititle,
xmlDir, xmlTargets,
specDir, specTargets,
miscSrc, miscDst,
needRefSources)
# Commands to tag the git branches
# releaseNum = release number of this spec update, to tag the tree with
# tagdate = date (used to be used to tag the tree with)
def createTags(releaseNum, tagdate):
# Tag date in YYYYMMDD format
now = tagdate.strftime('%Y%m%d')
print('echo To tag the spec branch for this release, execute the command:')
print('echo git tag -a -m \\"Tag Vulkan API specification for 1.1.' +
releaseNum, 'release\\"', 'v1.1.' + releaseNum)