gfxstream: import Vulkan-docs from 463f8c
This is based on 463f8c ("Change log for October
20, 2023 Vulkan 1.3.269 spec update").
Right now, the current version of vulkan-docs seems to
be 2021. Need to update. Import here without
modifications so we can track the changes that were
needed to support cereal.
BUG=310206667
TEST=launch_cvd --gpu_mode=gfxstream_guest_angle
Change-Id: Id2546d237cae00ed7d6731b67cd1a194f88c69ef
diff --git a/codegen/vulkan/vulkan-docs-next/makeSpec b/codegen/vulkan/vulkan-docs-next/makeSpec
new file mode 100755
index 0000000..fade64a
--- /dev/null
+++ b/codegen/vulkan/vulkan-docs-next/makeSpec
@@ -0,0 +1,169 @@
+#!/usr/bin/env python3
+#
+# Copyright 2020-2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Build a spec with requested extension sets and options.
+#
+# Usage: makeSpec script-options make-options
+# Script options are parsed by this script before invoking 'make':
+# -genpath path - directory for generated files and outputs
+# -spec core - make a spec with no extensions (default)
+# -spec khr - make a spec with all KHR extensions
+# -spec ratified - make a spec with all ratified (KHR + some EXT) extensions
+# -spec all - make a spec with all registered extensions
+# -version {1.0 | 1.1 | 1.2 | 1.3 | sc1.0} - make a spec with this core version
+# -ext name - add specified extension and its dependencies
+# -clean - clean generated files before building
+# -registry path - API XML to use instead of default
+# -apiname name - API name to use instead of default
+# -test - Build the test spec instead
+# -v - verbose, print actions before executing them
+# -n - dry-run, print actions instead of executing them
+# make-options - all other options are passed to 'make', including
+# requested build targets
+
+import argparse, copy, io, os, re, string, subprocess, sys
+
+def execute(args, results):
+ if results.verbose or results.dryrun:
+ print("'" + "' '".join(args) + "'")
+ if not results.dryrun:
+ subprocess.check_call(args)
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument('-clean', action='store_true',
+ help='Clean generated files before building')
+ parser.add_argument('-extension', action='append',
+ default=[],
+ help='Specify a required extension or extensions to add to targets')
+ parser.add_argument('-genpath', action='store',
+ default='gen',
+ help='Path to directory containing generated files')
+ parser.add_argument('-spec', action='store',
+ choices=[ 'core', 'khr', 'ratified', 'all' ],
+ default='core',
+ help='Type of spec to generate')
+ parser.add_argument('-version', action='store',
+ choices=[ '1.0', '1.1', '1.2', '1.3', 'sc1.0' ],
+ default='1.3',
+ help='Type of spec to generate')
+ parser.add_argument('-registry', action='store',
+ default=None,
+ help='Path to API XML registry file specifying version and extension dependencies')
+ parser.add_argument('-apiname', action='store',
+ default=None,
+ help='API name to generate')
+ parser.add_argument('-test', action='store_true',
+ help='Build the test spec instead of the Vulkan spec')
+ parser.add_argument('-n', action='store_true', dest='dryrun',
+ help='Only prints actions, do not execute them')
+ parser.add_argument('-v', action='store_true', dest='verbose',
+ help='Print actions before executing them')
+
+ (results, options) = parser.parse_known_args()
+
+ # Ensure genpath is an absolute path, not relative
+ if results.genpath[0] != '/':
+ results.genpath = os.getcwd() + '/' + results.genpath
+
+ # Look for scripts/extdependency.py
+ # This requires makeSpec to be invoked from the repository root, but we
+ # could derive that path.
+ sys.path.insert(0, 'scripts')
+ from extdependency import ApiDependencies
+ deps = ApiDependencies(results.registry, results.apiname)
+
+ # List of versions to build with from the requested -version
+ # This should come from the extdependency module as well, eventually
+ #@ Note that at present, building sc1.0 does *not* include Vulkan 1.3 automatically.
+ versionDict = {
+ '1.0' : [ 'VK_VERSION_1_0' ],
+ '1.1' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1' ],
+ '1.2' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2' ],
+ '1.3' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2', 'VK_VERSION_1_3' ],
+ 'sc1.0' : [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2', 'VKSC_VERSION_1_0' ],
+ }
+ versions = 'VERSIONS={}'.format(' '.join(versionDict[results.version]))
+
+ # List of extensions to build with from the requested -spec
+ # Also construct a spec title
+ # This should respect version dependencies as well
+ if results.spec == 'core':
+ title = ''
+ exts = set()
+ elif results.spec == 'khr':
+ title = 'with all KHR extensions'
+ exts = set(deps.khrExtensions())
+ elif results.spec == 'ratified':
+ title = 'with all ratified extensions'
+ exts = set(deps.ratifiedExtensions())
+ elif results.spec == 'all':
+ title = 'with all registered extensions'
+ exts = set(deps.allExtensions())
+
+ # List of explicitly requested extension and all its supported dependencies
+ extraexts = set()
+ for name in results.extension:
+ if name in deps.allExtensions():
+ extraexts.add(name)
+ for dep in deps.children(name):
+ if dep in deps.allExtensions():
+ extraexts.update({dep})
+ else:
+ raise Exception(f'ERROR: unknown extension {name}')
+
+ # See if any explicitly requested extensions are not implicitly requested
+ # Add any such extensions to the spec title
+ extraexts -= exts
+ if len(extraexts) > 0:
+ exts.update(extraexts)
+ if title != '':
+ title += ' and ' + ', '.join(sorted(extraexts))
+ else:
+ title += 'with ' + ', '.join(sorted(extraexts))
+
+ if title != '':
+ title = '(' + title + ')'
+
+ # Finally, actually invoke make as needed for the targets
+ args = [ 'make', 'GENERATED=' + results.genpath ]
+
+ if results.clean:
+ # If OUTDIR is set on the command line, pass it to the 'clean'
+ # target so it is cleaned as well.
+ cleanopts = ['clean']
+ for opt in options:
+ if opt[:7] == 'OUTDIR=':
+ cleanopts.append(opt)
+ try:
+ execute(args + cleanopts, results)
+ except:
+ sys.exit(1)
+
+ # Use the test spec if specified. This is used solely by self tests.
+ rootdir = os.path.dirname(os.path.abspath(__file__))
+ if results.test:
+ # Set the spec source to the test spec
+ args.append(f'SPECSRC={rootdir}/build_tests/testspec.adoc')
+ args.append(f'SPECDIR={rootdir}/build_tests/')
+ # Make sure the build is invariant
+ args.append('SPECREVISION=1.2.3')
+ args.append('SPECDATE=\\"2100-11-22 00:33:44Z\\"')
+ args.append('SPECREMARK=\\"test build\\"')
+
+ args.append(versions)
+
+ # The actual target
+ if len(exts) > 0:
+ args.append(f'EXTENSIONS={" ".join(sorted(exts))}')
+ args.append(f'APITITLE={title}')
+ args += options
+
+ try:
+ execute(args, results)
+ except:
+ sys.exit(1)