aboutsummaryrefslogtreecommitdiffhomepage
path: root/registry
diff options
context:
space:
mode:
authorJon Leech <[email protected]>2023-10-20 23:33:55 -0700
committerJuan Ramos <[email protected]>2023-10-23 13:27:44 -0600
commitc26f44cc8a5fa8966194a108f0c3c22d14d34afd (patch)
tree7c346106edb5039d8282f7526541a0c238e9e2d0 /registry
parent374f9fd97520f6dd1b80745de09208d878ab4a52 (diff)
downloadVulkan-Headers-c26f44cc8a5fa8966194a108f0c3c22d14d34afd.tar.gz
Vulkan-Headers-c26f44cc8a5fa8966194a108f0c3c22d14d34afd.zip
Remove genvk.py from Vulkan-Headers
Per comments in #449 and INTEGRATION.md, it is not needed, nor useful in this repository.
Diffstat (limited to 'registry')
-rwxr-xr-xregistry/genvk.py1117
1 files changed, 0 insertions, 1117 deletions
diff --git a/registry/genvk.py b/registry/genvk.py
deleted file mode 100755
index 676c78c..0000000
--- a/registry/genvk.py
+++ /dev/null
@@ -1,1117 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright 2013-2023 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-import argparse
-import os
-import pdb
-import re
-import sys
-import copy
-import time
-import xml.etree.ElementTree as etree
-
-sys.path.append(os.path.abspath(os.path.dirname(__file__)))
-
-from cgenerator import CGeneratorOptions, COutputGenerator
-# Vulkan SC modules
-from json_parser import JSONParserGenerator, JSONParserOptions
-from schema_generator import SchemaGeneratorOptions, SchemaOutputGenerator
-from json_generator import JSONGeneratorOptions, JSONOutputGenerator
-from json_h_generator import JSONHeaderOutputGenerator, JSONHeaderGeneratorOptions
-from json_c_generator import JSONCOutputGenerator, JSONCGeneratorOptions
-
-from docgenerator import DocGeneratorOptions, DocOutputGenerator
-from extensionmetadocgenerator import (ExtensionMetaDocGeneratorOptions,
- ExtensionMetaDocOutputGenerator)
-from interfacedocgenerator import InterfaceDocGenerator
-from generator import write
-from spirvcapgenerator import SpirvCapabilityOutputGenerator
-from hostsyncgenerator import HostSynchronizationOutputGenerator
-from formatsgenerator import FormatsOutputGenerator
-from syncgenerator import SyncOutputGenerator
-from jsgenerator import JSOutputGenerator
-from pygenerator import PyOutputGenerator
-from rubygenerator import RubyOutputGenerator
-from reflib import logDiag, logWarn, logErr, setLogFile
-from reg import Registry
-from validitygenerator import ValidityOutputGenerator
-from apiconventions import APIConventions
-
-# Simple timer functions
-startTime = None
-
-
-def startTimer(timeit):
- global startTime
- if timeit:
- startTime = time.process_time()
-
-
-def endTimer(timeit, msg):
- global startTime
- if timeit and startTime is not None:
- endTime = time.process_time()
- logDiag(msg, endTime - startTime)
- startTime = None
-
-
-def makeREstring(strings, default=None, strings_are_regex=False):
- """Turn a list of strings into a regexp string matching exactly those strings."""
- if strings or default is None:
- if not strings_are_regex:
- strings = (re.escape(s) for s in strings)
- return '^(' + '|'.join(strings) + ')$'
- return default
-
-
-def makeGenOpts(args):
- """Returns a directory of [ generator function, generator options ] indexed
- by specified short names. The generator options incorporate the following
- parameters:
-
- args is an parsed argument object; see below for the fields that are used."""
- global genOpts
- genOpts = {}
-
- # Default class of extensions to include, or None
- defaultExtensions = args.defaultExtensions
-
- # Additional extensions to include (list of extensions)
- extensions = args.extension
-
- # Extensions to remove (list of extensions)
- removeExtensions = args.removeExtensions
-
- # Extensions to emit (list of extensions)
- emitExtensions = args.emitExtensions
-
- # SPIR-V capabilities / features to emit (list of extensions & capabilities)
- emitSpirv = args.emitSpirv
-
- # Vulkan Formats to emit
- emitFormats = args.emitFormats
-
- # Features to include (list of features)
- features = args.feature
-
- # Whether to disable inclusion protect in headers
- protect = args.protect
-
- # Output target directory
- directory = args.directory
-
- # Path to generated files, particularly apimap.py
- genpath = args.genpath
-
- # Generate MISRA C-friendly headers
- misracstyle = args.misracstyle;
-
- # Generate MISRA C++-friendly headers
- misracppstyle = args.misracppstyle;
-
- # Descriptive names for various regexp patterns used to select
- # versions and extensions
- allFormats = allSpirv = allFeatures = allExtensions = r'.*'
-
- # Turn lists of names/patterns into matching regular expressions
- addExtensionsPat = makeREstring(extensions, None)
- removeExtensionsPat = makeREstring(removeExtensions, None)
- emitExtensionsPat = makeREstring(emitExtensions, allExtensions)
- emitSpirvPat = makeREstring(emitSpirv, allSpirv)
- emitFormatsPat = makeREstring(emitFormats, allFormats)
- featuresPat = makeREstring(features, allFeatures)
-
- # Copyright text prefixing all headers (list of strings).
- # The SPDX formatting below works around constraints of the 'reuse' tool
- prefixStrings = [
- '/*',
- '** Copyright 2015-2023 The Khronos Group Inc.',
- '**',
- '** SPDX-License-Identifier' + ': Apache-2.0',
- '*/',
- ''
- ]
-
- # Text specific to Vulkan headers
- vkPrefixStrings = [
- '/*',
- '** This header is generated from the Khronos Vulkan XML API Registry.',
- '**',
- '*/',
- ''
- ]
-
- vulkanLayer = args.vulkanLayer
-
- # Defaults for generating re-inclusion protection wrappers (or not)
- protectFile = protect
-
- # An API style conventions object
- conventions = APIConventions()
-
- if args.apiname is not None:
- defaultAPIName = args.apiname
- else:
- defaultAPIName = conventions.xml_api_name
-
- # APIs to merge
- mergeApiNames = args.mergeApiNames
-
- isCTS = args.isCTS
-
- # API include files for spec and ref pages
- # Overwrites include subdirectories in spec source tree
- # The generated include files do not include the calling convention
- # macros (apientry etc.), unlike the header files.
- # Because the 1.0 core branch includes ref pages for extensions,
- # all the extension interfaces need to be generated, even though
- # none are used by the core spec itself.
- genOpts['apiinc'] = [
- DocOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = genpath,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- apicall = '',
- apientry = '',
- apientryp = '*',
- alignFuncParam = 48,
- expandEnumerants = False)
- ]
-
- # JavaScript, Python, and Ruby representations of API information, used
- # by scripts that do not need to load the full XML.
- genOpts['apimap.cjs'] = [
- JSOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'apimap.cjs',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- reparentEnums = False)
- ]
-
- genOpts['apimap.py'] = [
- PyOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'apimap.py',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- reparentEnums = False)
- ]
-
- genOpts['apimap.rb'] = [
- RubyOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'apimap.rb',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- reparentEnums = False)
- ]
-
-
- # API validity files for spec
- #
- # requireCommandAliases is set to True because we need validity files
- # for the command something is promoted to even when the promoted-to
- # feature is not included. This avoids wordy includes of validity files.
- genOpts['validinc'] = [
- ValidityOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- requireCommandAliases = True,
- )
- ]
-
- # API host sync table files for spec
- genOpts['hostsyncinc'] = [
- HostSynchronizationOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- reparentEnums = False)
- ]
-
- # Extension metainformation for spec extension appendices
- # Includes all extensions by default, but only so that the generated
- # 'promoted_extensions_*' files refer to all extensions that were
- # promoted to a core version.
- genOpts['extinc'] = [
- ExtensionMetaDocOutputGenerator,
- ExtensionMetaDocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = None,
- defaultExtensions = defaultExtensions,
- addExtensions = addExtensionsPat,
- removeExtensions = None,
- emitExtensions = emitExtensionsPat)
- ]
-
- # Version and extension interface docs for version/extension appendices
- # Includes all extensions by default.
- genOpts['interfaceinc'] = [
- InterfaceDocGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- reparentEnums = False)
- ]
-
- genOpts['spirvcapinc'] = [
- SpirvCapabilityOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- emitSpirv = emitSpirvPat,
- reparentEnums = False)
- ]
-
- # Used to generate various format chapter tables
- genOpts['formatsinc'] = [
- FormatsOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- emitFormats = emitFormatsPat,
- reparentEnums = False)
- ]
-
- # Used to generate various synchronization chapter tables
- genOpts['syncinc'] = [
- SyncOutputGenerator,
- DocGeneratorOptions(
- conventions = conventions,
- filename = 'timeMarker',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- reparentEnums = False)
- ]
-
- # Platform extensions, in their own header files
- # Each element of the platforms[] array defines information for
- # generating a single platform:
- # [0] is the generated header file name
- # [1] is the set of platform extensions to generate
- # [2] is additional extensions whose interfaces should be considered,
- # but suppressed in the output, to avoid duplicate definitions of
- # dependent types like VkDisplayKHR and VkSurfaceKHR which come from
- # non-platform extensions.
-
- # Track all platform extensions, for exclusion from vulkan_core.h
- allPlatformExtensions = []
-
- # Extensions suppressed for all WSI platforms (WSI extensions required
- # by all platforms)
- commonSuppressExtensions = [ 'VK_KHR_display', 'VK_KHR_swapchain' ]
-
- # Extensions required and suppressed for beta "platform". This can
- # probably eventually be derived from the requires= attributes of
- # the extension blocks.
- betaRequireExtensions = [
- 'VK_KHR_portability_subset',
- 'VK_KHR_video_encode_queue',
- 'VK_EXT_video_encode_h264',
- 'VK_EXT_video_encode_h265',
- 'VK_NV_displacement_micromap',
- 'VK_AMDX_shader_enqueue',
- ]
-
- betaSuppressExtensions = [
- 'VK_KHR_video_queue',
- 'VK_EXT_opacity_micromap',
- 'VK_KHR_pipeline_library',
- ]
-
- platforms = [
- [ 'vulkan_android.h', [ 'VK_KHR_android_surface',
- 'VK_ANDROID_external_memory_android_hardware_buffer',
- 'VK_ANDROID_external_format_resolve'
- ], commonSuppressExtensions +
- [ 'VK_KHR_format_feature_flags2',
- ] ],
- [ 'vulkan_fuchsia.h', [ 'VK_FUCHSIA_imagepipe_surface',
- 'VK_FUCHSIA_external_memory',
- 'VK_FUCHSIA_external_semaphore',
- 'VK_FUCHSIA_buffer_collection' ], commonSuppressExtensions ],
- [ 'vulkan_ggp.h', [ 'VK_GGP_stream_descriptor_surface',
- 'VK_GGP_frame_token' ], commonSuppressExtensions ],
- [ 'vulkan_ios.h', [ 'VK_MVK_ios_surface' ], commonSuppressExtensions ],
- [ 'vulkan_macos.h', [ 'VK_MVK_macos_surface' ], commonSuppressExtensions ],
- [ 'vulkan_vi.h', [ 'VK_NN_vi_surface' ], commonSuppressExtensions ],
- [ 'vulkan_wayland.h', [ 'VK_KHR_wayland_surface' ], commonSuppressExtensions ],
- [ 'vulkan_win32.h', [ 'VK_.*_win32(|_.*)', 'VK_.*_winrt(|_.*)', 'VK_EXT_full_screen_exclusive' ],
- commonSuppressExtensions +
- [ 'VK_KHR_external_semaphore',
- 'VK_KHR_external_memory_capabilities',
- 'VK_KHR_external_fence',
- 'VK_KHR_external_fence_capabilities',
- 'VK_KHR_get_surface_capabilities2',
- 'VK_NV_external_memory_capabilities',
- ] ],
- [ 'vulkan_xcb.h', [ 'VK_KHR_xcb_surface' ], commonSuppressExtensions ],
- [ 'vulkan_xlib.h', [ 'VK_KHR_xlib_surface' ], commonSuppressExtensions ],
- [ 'vulkan_directfb.h', [ 'VK_EXT_directfb_surface' ], commonSuppressExtensions ],
- [ 'vulkan_xlib_xrandr.h', [ 'VK_EXT_acquire_xlib_display' ], commonSuppressExtensions ],
- [ 'vulkan_metal.h', [ 'VK_EXT_metal_surface',
- 'VK_EXT_metal_objects' ], commonSuppressExtensions ],
- [ 'vulkan_screen.h', [ 'VK_QNX_screen_surface',
- 'VK_QNX_external_memory_screen_buffer' ], commonSuppressExtensions ],
- [ 'vulkan_sci.h', [ 'VK_NV_external_sci_sync',
- 'VK_NV_external_sci_sync2',
- 'VK_NV_external_memory_sci_buf'], commonSuppressExtensions ],
- [ 'vulkan_beta.h', betaRequireExtensions, betaSuppressExtensions ],
- ]
-
- for platform in platforms:
- headername = platform[0]
-
- allPlatformExtensions += platform[1]
-
- addPlatformExtensionsRE = makeREstring(
- platform[1] + platform[2], strings_are_regex=True)
- emitPlatformExtensionsRE = makeREstring(
- platform[1], strings_are_regex=True)
-
- opts = CGeneratorOptions(
- conventions = conventions,
- filename = headername,
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- mergeApiNames = mergeApiNames,
- profile = None,
- versions = featuresPat,
- emitversions = None,
- defaultExtensions = None,
- addExtensions = addPlatformExtensionsRE,
- removeExtensions = None,
- emitExtensions = emitPlatformExtensionsRE,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48,
- misracstyle = misracstyle,
- misracppstyle = misracppstyle)
-
- genOpts[headername] = [ COutputGenerator, opts ]
-
- # Header for core API + extensions.
- # To generate just the core API,
- # change to 'defaultExtensions = None' below.
- #
- # By default this adds all enabled, non-platform extensions.
- # It removes all platform extensions (from the platform headers options
- # constructed above) as well as any explicitly specified removals.
-
- removeExtensionsPat = makeREstring(
- allPlatformExtensions + removeExtensions, None, strings_are_regex=True)
-
- genOpts['vulkan_core.h'] = [
- COutputGenerator,
- CGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan_core.h',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- mergeApiNames = mergeApiNames,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = defaultExtensions,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48,
- misracstyle = misracstyle,
- misracppstyle = misracppstyle)
- ]
-
- # Vulkan versions to include for SC header - SC *removes* features from 1.0/1.1/1.2
- scVersions = makeREstring(['VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2', 'VKSC_VERSION_1_0'])
-
- genOpts['vulkan_sc_core.h'] = [
- COutputGenerator,
- CGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan_sc_core.h',
- directory = directory,
- apiname = 'vulkansc',
- profile = None,
- versions = scVersions,
- emitversions = scVersions,
- defaultExtensions = 'vulkansc',
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48,
- misracstyle = misracstyle,
- misracppstyle = misracppstyle)
- ]
-
- genOpts['vulkan_sc_core.hpp'] = [
- COutputGenerator,
- CGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan_sc_core.hpp',
- directory = directory,
- apiname = 'vulkansc',
- profile = None,
- versions = scVersions,
- emitversions = scVersions,
- defaultExtensions = 'vulkansc',
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48,
- misracstyle = misracstyle,
- misracppstyle = misracppstyle)
- ]
-
- genOpts['vk.json'] = [
- SchemaOutputGenerator,
- SchemaGeneratorOptions(
- conventions = conventions,
- filename = 'vk.json',
- directory = directory,
- apiname = 'vulkansc',
- profile = None,
- versions = scVersions,
- emitversions = scVersions,
- defaultExtensions = 'vulkansc',
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48)
- ]
-
- if vulkanLayer:
- genOpts['vulkan_json_data.hpp'] = [
- JSONOutputGenerator,
- JSONGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan_json_data.hpp',
- directory = directory,
- apiname = 'vulkan',
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = None,
- addExtensions = addExtensionsPat,
- removeExtensions = None,
- emitExtensions = None,
- vulkanLayer = vulkanLayer,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48)
- ]
- else:
- genOpts['vulkan_json_data.hpp'] = [
- JSONOutputGenerator,
- JSONGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan_json_data.hpp',
- directory = directory,
- apiname = 'vulkansc',
- profile = None,
- versions = scVersions,
- emitversions = scVersions,
- defaultExtensions = 'vulkansc',
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- vulkanLayer = vulkanLayer,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- isCTS = isCTS,
- alignFuncParam = 48)
- ]
-
- # keep any relevant platform extensions for the following generators
- # (needed for e.g. the vulkan_sci extensions)
- explicitRemoveExtensionsPat = makeREstring(
- removeExtensions, None, strings_are_regex=True)
-
- # Raw C header file generator.
- genOpts['vulkan_json_gen.h'] = [
- JSONHeaderOutputGenerator,
- JSONHeaderGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan_json_gen.h',
- directory = directory,
- apiname = 'vulkansc',
- profile = None,
- versions = scVersions,
- emitversions = scVersions,
- defaultExtensions = 'vulkansc',
- addExtensions = addExtensionsPat,
- removeExtensions = explicitRemoveExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48)
- ]
-
- # Raw C source file generator.
- genOpts['vulkan_json_gen.c'] = [
- JSONCOutputGenerator,
- JSONCGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan_json_gen.c',
- directory = directory,
- apiname = 'vulkansc',
- profile = None,
- versions = scVersions,
- emitversions = scVersions,
- defaultExtensions = 'vulkansc',
- addExtensions = addExtensionsPat,
- removeExtensions = explicitRemoveExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48)
- ]
-
- genOpts['vulkan_json_parser.hpp'] = [
- JSONParserGenerator,
- JSONParserOptions(
- conventions = conventions,
- filename = 'vulkan_json_parser.hpp',
- directory = directory,
- apiname = 'vulkansc',
- profile = None,
- versions = scVersions,
- emitversions = scVersions,
- defaultExtensions = 'vulkansc',
- addExtensions = addExtensionsPat,
- removeExtensions = explicitRemoveExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- isCTS = isCTS,
- alignFuncParam = 48)
- ]
-
- # Unused - vulkan10.h target.
- # It is possible to generate a header with just the Vulkan 1.0 +
- # extension interfaces defined, but since the promoted KHR extensions
- # are now defined in terms of the 1.1 interfaces, such a header is very
- # similar to vulkan_core.h.
- genOpts['vulkan10.h'] = [
- COutputGenerator,
- CGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan10.h',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = 'VK_VERSION_1_0',
- emitversions = 'VK_VERSION_1_0',
- defaultExtensions = None,
- addExtensions = None,
- removeExtensions = None,
- emitExtensions = None,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48,
- misracstyle = misracstyle,
- misracppstyle = misracppstyle)
- ]
-
- # Video header target - combines all video extension dependencies into a
- # single header, at present.
- genOpts['vk_video.h'] = [
- COutputGenerator,
- CGeneratorOptions(
- conventions = conventions,
- filename = 'vk_video.h',
- directory = directory,
- genpath = None,
- apiname = 'vulkan',
- profile = None,
- versions = None,
- emitversions = None,
- defaultExtensions = defaultExtensions,
- addExtensions = addExtensionsPat,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = '',
- apientry = '',
- apientryp = '',
- alignFuncParam = 48,
- misracstyle = misracstyle,
- misracppstyle = misracppstyle)
- ]
-
- # Video extension 'Std' interfaces, each in its own header files
- # These are not Vulkan extensions, or a part of the Vulkan API at all.
- # They are treated in a similar fashion for generation purposes, but
- # all required APIs for each interface must be explicitly required.
- #
- # Each element of the videoStd[] array is an extension name defining an
- # interface, and is also the basis for the generated header file name.
-
- videoStd = [
- 'vulkan_video_codecs_common',
- 'vulkan_video_codec_h264std',
- 'vulkan_video_codec_h264std_decode',
- 'vulkan_video_codec_h264std_encode',
- 'vulkan_video_codec_h265std',
- 'vulkan_video_codec_h265std_decode',
- 'vulkan_video_codec_h265std_encode',
- ]
-
- # Unused at present
- # addExtensionRE = makeREstring(videoStd)
- for codec in videoStd:
- headername = f'{codec}.h'
-
- # Consider all of the codecs 'extensions', but only emit this one
- emitExtensionRE = makeREstring([codec])
-
- opts = CGeneratorOptions(
- conventions = conventions,
- filename = headername,
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- mergeApiNames = mergeApiNames,
- profile = None,
- versions = None,
- emitversions = None,
- defaultExtensions = None,
- addExtensions = emitExtensionRE,
- removeExtensions = None,
- emitExtensions = emitExtensionRE,
- requireDepends = False,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = False,
- protectFile = protectFile,
- protectFeature = False,
- alignFuncParam = 48,
- )
-
- genOpts[headername] = [ COutputGenerator, opts ]
-
- # Unused - vulkan11.h target.
- # It is possible to generate a header with just the Vulkan 1.0 +
- # extension interfaces defined, but since the promoted KHR extensions
- # are now defined in terms of the 1.1 interfaces, such a header is very
- # similar to vulkan_core.h.
- genOpts['vulkan11.h'] = [
- COutputGenerator,
- CGeneratorOptions(
- conventions = conventions,
- filename = 'vulkan11.h',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = '^VK_VERSION_1_[01]$',
- emitversions = '^VK_VERSION_1_[01]$',
- defaultExtensions = None,
- addExtensions = None,
- removeExtensions = None,
- emitExtensions = None,
- prefixText = prefixStrings + vkPrefixStrings,
- genFuncPointers = True,
- protectFile = protectFile,
- protectFeature = False,
- protectProto = '#ifndef',
- protectProtoStr = 'VK_NO_PROTOTYPES',
- apicall = 'VKAPI_ATTR ',
- apientry = 'VKAPI_CALL ',
- apientryp = 'VKAPI_PTR *',
- alignFuncParam = 48,
- misracstyle = misracstyle,
- misracppstyle = misracppstyle)
- ]
-
- genOpts['alias.h'] = [
- COutputGenerator,
- CGeneratorOptions(
- conventions = conventions,
- filename = 'alias.h',
- directory = directory,
- genpath = None,
- apiname = defaultAPIName,
- profile = None,
- versions = featuresPat,
- emitversions = featuresPat,
- defaultExtensions = defaultExtensions,
- addExtensions = None,
- removeExtensions = removeExtensionsPat,
- emitExtensions = emitExtensionsPat,
- prefixText = None,
- genFuncPointers = False,
- protectFile = False,
- protectFeature = False,
- protectProto = '',
- protectProtoStr = '',
- apicall = '',
- apientry = '',
- apientryp = '',
- alignFuncParam = 36)
- ]
-
-
-def genTarget(args):
- """Create an API generator and corresponding generator options based on
- the requested target and command line options.
-
- This is encapsulated in a function so it can be profiled and/or timed.
- The args parameter is an parsed argument object containing the following
- fields that are used:
-
- - target - target to generate
- - directory - directory to generate it in
- - protect - True if re-inclusion wrappers should be created
- - extensions - list of additional extensions to include in generated interfaces"""
-
- # Create generator options with parameters specified on command line
- makeGenOpts(args)
-
- # Select a generator matching the requested target
- if args.target in genOpts:
- createGenerator = genOpts[args.target][0]
- options = genOpts[args.target][1]
-
- logDiag('* Building', options.filename)
- logDiag('* options.versions =', options.versions)
- logDiag('* options.emitversions =', options.emitversions)
- logDiag('* options.defaultExtensions =', options.defaultExtensions)
- logDiag('* options.addExtensions =', options.addExtensions)
- logDiag('* options.removeExtensions =', options.removeExtensions)
- logDiag('* options.emitExtensions =', options.emitExtensions)
- logDiag('* options.emitSpirv =', options.emitSpirv)
- logDiag('* options.emitFormats =', options.emitFormats)
-
- gen = createGenerator(errFile=errWarn,
- warnFile=errWarn,
- diagFile=diag)
- return (gen, options)
- else:
- logErr('No generator options for unknown target:', args.target)
- return None
-
-
-# -feature name
-# -extension name
-# For both, "name" may be a single name, or a space-separated list
-# of names, or a regular expression.
-if __name__ == '__main__':
- parser = argparse.ArgumentParser()
-
- parser.add_argument('-apiname', action='store',
- default=None,
- help='Specify API to generate (defaults to repository-specific conventions object value)')
- parser.add_argument('-mergeApiNames', action='store',
- default=None,
- help='Specify a comma separated list of APIs to merge into the target API')
- parser.add_argument('-defaultExtensions', action='store',
- default=APIConventions().xml_api_name,
- help='Specify a single class of extensions to add to targets')
- parser.add_argument('-extension', action='append',
- default=[],
- help='Specify an extension or extensions to add to targets')
- parser.add_argument('-removeExtensions', action='append',
- default=[],
- help='Specify an extension or extensions to remove from targets')
- parser.add_argument('-emitExtensions', action='append',
- default=[],
- help='Specify an extension or extensions to emit in targets')
- parser.add_argument('-emitSpirv', action='append',
- default=[],
- help='Specify a SPIR-V extension or capability to emit in targets')
- parser.add_argument('-emitFormats', action='append',
- default=[],
- help='Specify Vulkan Formats to emit in targets')
- parser.add_argument('-feature', action='append',
- default=[],
- help='Specify a core API feature name or names to add to targets')
- parser.add_argument('-debug', action='store_true',
- help='Enable debugging')
- parser.add_argument('-dump', action='store_true',
- help='Enable dump to stderr')
- parser.add_argument('-diagfile', action='store',
- default=None,
- help='Write diagnostics to specified file')
- parser.add_argument('-errfile', action='store',
- default=None,
- help='Write errors and warnings to specified file instead of stderr')
- parser.add_argument('-noprotect', dest='protect', action='store_false',
- help='Disable inclusion protection in output headers')
- parser.add_argument('-profile', action='store_true',
- help='Enable profiling')
- parser.add_argument('-registry', action='store',
- default='vk.xml',
- help='Use specified registry file instead of vk.xml')
- parser.add_argument('-time', action='store_true',
- help='Enable timing')
- parser.add_argument('-genpath', action='store', default='gen',
- help='Path to generated files')
- parser.add_argument('-o', action='store', dest='directory',
- default='.',
- help='Create target and related files in specified directory')
- parser.add_argument('target', metavar='target', nargs='?',
- help='Specify target')
- parser.add_argument('-quiet', action='store_true', default=True,
- help='Suppress script output during normal execution.')
- parser.add_argument('-verbose', action='store_false', dest='quiet', default=True,
- help='Enable script output during normal execution.')
- parser.add_argument('--vulkanLayer', action='store_true', dest='vulkanLayer',
- help='Enable scripts to generate VK specific vulkan_json_data.hpp for json_gen_layer.')
- parser.add_argument('-misracstyle', dest='misracstyle', action='store_true',
- help='generate MISRA C-friendly headers')
- parser.add_argument('-misracppstyle', dest='misracppstyle', action='store_true',
- help='generate MISRA C++-friendly headers')
- parser.add_argument('--iscts', action='store_true', dest='isCTS',
- help='Specify if this should generate CTS compatible code')
-
- args = parser.parse_args()
-
- # This splits arguments which are space-separated lists
- args.feature = [name for arg in args.feature for name in arg.split()]
- args.extension = [name for arg in args.extension for name in arg.split()]
-
- # create error/warning & diagnostic files
- if args.errfile:
- errWarn = open(args.errfile, 'w', encoding='utf-8')
- else:
- errWarn = sys.stderr
-
- if args.diagfile:
- diag = open(args.diagfile, 'w', encoding='utf-8')
- else:
- diag = None
-
- if args.time:
- # Log diagnostics and warnings
- setLogFile(setDiag = True, setWarn = True, filename = '-')
-
- # Create the API generator & generator options
- (gen, options) = genTarget(args)
-
- # Create the registry object with the specified generator and generator
- # options. The options are set before XML loading as they may affect it.
- reg = Registry(gen, options)
-
- # Parse the specified registry XML into an ElementTree object
- startTimer(args.time)
- tree = etree.parse(args.registry)
- endTimer(args.time, '* Time to make ElementTree =')
-
- # Load the XML tree into the registry object
- startTimer(args.time)
- reg.loadElementTree(tree)
- endTimer(args.time, '* Time to parse ElementTree =')
-
- if args.dump:
- logDiag('* Dumping registry to regdump.txt')
- reg.dumpReg(filehandle=open('regdump.txt', 'w', encoding='utf-8'))
-
- # Finally, use the output generator to create the requested target
- if args.debug:
- pdb.run('reg.apiGen()')
- else:
- startTimer(args.time)
- reg.apiGen()
- endTimer(args.time, '* Time to generate ' + options.filename + ' =')
-
- if not args.quiet:
- logDiag('* Generated', options.filename)