1*b7893ccfSSadaf Ebrahimi#!/usr/bin/python3 2*b7893ccfSSadaf Ebrahimi# 3*b7893ccfSSadaf Ebrahimi# Copyright (c) 2013-2019 The Khronos Group Inc. 4*b7893ccfSSadaf Ebrahimi# 5*b7893ccfSSadaf Ebrahimi# Licensed under the Apache License, Version 2.0 (the "License"); 6*b7893ccfSSadaf Ebrahimi# you may not use this file except in compliance with the License. 7*b7893ccfSSadaf Ebrahimi# You may obtain a copy of the License at 8*b7893ccfSSadaf Ebrahimi# 9*b7893ccfSSadaf Ebrahimi# http://www.apache.org/licenses/LICENSE-2.0 10*b7893ccfSSadaf Ebrahimi# 11*b7893ccfSSadaf Ebrahimi# Unless required by applicable law or agreed to in writing, software 12*b7893ccfSSadaf Ebrahimi# distributed under the License is distributed on an "AS IS" BASIS, 13*b7893ccfSSadaf Ebrahimi# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b7893ccfSSadaf Ebrahimi# See the License for the specific language governing permissions and 15*b7893ccfSSadaf Ebrahimi# limitations under the License. 16*b7893ccfSSadaf Ebrahimi 17*b7893ccfSSadaf Ebrahimiimport argparse, cProfile, pdb, string, sys, time, os 18*b7893ccfSSadaf Ebrahimi 19*b7893ccfSSadaf Ebrahimi# Simple timer functions 20*b7893ccfSSadaf EbrahimistartTime = None 21*b7893ccfSSadaf Ebrahimi 22*b7893ccfSSadaf Ebrahimidef startTimer(timeit): 23*b7893ccfSSadaf Ebrahimi global startTime 24*b7893ccfSSadaf Ebrahimi if timeit: 25*b7893ccfSSadaf Ebrahimi startTime = time.process_time() 26*b7893ccfSSadaf Ebrahimi 27*b7893ccfSSadaf Ebrahimidef endTimer(timeit, msg): 28*b7893ccfSSadaf Ebrahimi global startTime 29*b7893ccfSSadaf Ebrahimi if timeit: 30*b7893ccfSSadaf Ebrahimi endTime = time.process_time() 31*b7893ccfSSadaf Ebrahimi write(msg, endTime - startTime, file=sys.stderr) 32*b7893ccfSSadaf Ebrahimi startTime = None 33*b7893ccfSSadaf Ebrahimi 34*b7893ccfSSadaf Ebrahimi# Turn a list of strings into a regexp string matching exactly those strings 35*b7893ccfSSadaf Ebrahimidef makeREstring(list, default = None): 36*b7893ccfSSadaf Ebrahimi if len(list) > 0 or default is None: 37*b7893ccfSSadaf Ebrahimi return '^(' + '|'.join(list) + ')$' 38*b7893ccfSSadaf Ebrahimi else: 39*b7893ccfSSadaf Ebrahimi return default 40*b7893ccfSSadaf Ebrahimi 41*b7893ccfSSadaf Ebrahimi# Returns a directory of [ generator function, generator options ] indexed 42*b7893ccfSSadaf Ebrahimi# by specified short names. The generator options incorporate the following 43*b7893ccfSSadaf Ebrahimi# parameters: 44*b7893ccfSSadaf Ebrahimi# 45*b7893ccfSSadaf Ebrahimi# args is an parsed argument object; see below for the fields that are used. 46*b7893ccfSSadaf Ebrahimidef makeGenOpts(args): 47*b7893ccfSSadaf Ebrahimi global genOpts 48*b7893ccfSSadaf Ebrahimi genOpts = {} 49*b7893ccfSSadaf Ebrahimi 50*b7893ccfSSadaf Ebrahimi # Default class of extensions to include, or None 51*b7893ccfSSadaf Ebrahimi defaultExtensions = args.defaultExtensions 52*b7893ccfSSadaf Ebrahimi 53*b7893ccfSSadaf Ebrahimi # Additional extensions to include (list of extensions) 54*b7893ccfSSadaf Ebrahimi extensions = args.extension 55*b7893ccfSSadaf Ebrahimi 56*b7893ccfSSadaf Ebrahimi # Extensions to remove (list of extensions) 57*b7893ccfSSadaf Ebrahimi removeExtensions = args.removeExtensions 58*b7893ccfSSadaf Ebrahimi 59*b7893ccfSSadaf Ebrahimi # Extensions to emit (list of extensions) 60*b7893ccfSSadaf Ebrahimi emitExtensions = args.emitExtensions 61*b7893ccfSSadaf Ebrahimi 62*b7893ccfSSadaf Ebrahimi # Features to include (list of features) 63*b7893ccfSSadaf Ebrahimi features = args.feature 64*b7893ccfSSadaf Ebrahimi 65*b7893ccfSSadaf Ebrahimi # Whether to disable inclusion protect in headers 66*b7893ccfSSadaf Ebrahimi protect = args.protect 67*b7893ccfSSadaf Ebrahimi 68*b7893ccfSSadaf Ebrahimi # Output target directory 69*b7893ccfSSadaf Ebrahimi directory = args.directory 70*b7893ccfSSadaf Ebrahimi 71*b7893ccfSSadaf Ebrahimi # Descriptive names for various regexp patterns used to select 72*b7893ccfSSadaf Ebrahimi # versions and extensions 73*b7893ccfSSadaf Ebrahimi allFeatures = allExtensions = '.*' 74*b7893ccfSSadaf Ebrahimi noFeatures = noExtensions = None 75*b7893ccfSSadaf Ebrahimi 76*b7893ccfSSadaf Ebrahimi # Turn lists of names/patterns into matching regular expressions 77*b7893ccfSSadaf Ebrahimi addExtensionsPat = makeREstring(extensions, None) 78*b7893ccfSSadaf Ebrahimi removeExtensionsPat = makeREstring(removeExtensions, None) 79*b7893ccfSSadaf Ebrahimi emitExtensionsPat = makeREstring(emitExtensions, allExtensions) 80*b7893ccfSSadaf Ebrahimi featuresPat = makeREstring(features, allFeatures) 81*b7893ccfSSadaf Ebrahimi 82*b7893ccfSSadaf Ebrahimi # Copyright text prefixing all headers (list of strings). 83*b7893ccfSSadaf Ebrahimi prefixStrings = [ 84*b7893ccfSSadaf Ebrahimi '/*', 85*b7893ccfSSadaf Ebrahimi '** Copyright (c) 2015-2019 The Khronos Group Inc.', 86*b7893ccfSSadaf Ebrahimi '**', 87*b7893ccfSSadaf Ebrahimi '** Licensed under the Apache License, Version 2.0 (the "License");', 88*b7893ccfSSadaf Ebrahimi '** you may not use this file except in compliance with the License.', 89*b7893ccfSSadaf Ebrahimi '** You may obtain a copy of the License at', 90*b7893ccfSSadaf Ebrahimi '**', 91*b7893ccfSSadaf Ebrahimi '** http://www.apache.org/licenses/LICENSE-2.0', 92*b7893ccfSSadaf Ebrahimi '**', 93*b7893ccfSSadaf Ebrahimi '** Unless required by applicable law or agreed to in writing, software', 94*b7893ccfSSadaf Ebrahimi '** distributed under the License is distributed on an "AS IS" BASIS,', 95*b7893ccfSSadaf Ebrahimi '** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.', 96*b7893ccfSSadaf Ebrahimi '** See the License for the specific language governing permissions and', 97*b7893ccfSSadaf Ebrahimi '** limitations under the License.', 98*b7893ccfSSadaf Ebrahimi '*/', 99*b7893ccfSSadaf Ebrahimi '' 100*b7893ccfSSadaf Ebrahimi ] 101*b7893ccfSSadaf Ebrahimi 102*b7893ccfSSadaf Ebrahimi # Text specific to Vulkan headers 103*b7893ccfSSadaf Ebrahimi vkPrefixStrings = [ 104*b7893ccfSSadaf Ebrahimi '/*', 105*b7893ccfSSadaf Ebrahimi '** This header is generated from the Khronos Vulkan XML API Registry.', 106*b7893ccfSSadaf Ebrahimi '**', 107*b7893ccfSSadaf Ebrahimi '*/', 108*b7893ccfSSadaf Ebrahimi '' 109*b7893ccfSSadaf Ebrahimi ] 110*b7893ccfSSadaf Ebrahimi 111*b7893ccfSSadaf Ebrahimi # Defaults for generating re-inclusion protection wrappers (or not) 112*b7893ccfSSadaf Ebrahimi protectFeature = protect 113*b7893ccfSSadaf Ebrahimi 114*b7893ccfSSadaf Ebrahimi # An API style convention object 115*b7893ccfSSadaf Ebrahimi conventions = VulkanConventions() 116*b7893ccfSSadaf Ebrahimi 117*b7893ccfSSadaf Ebrahimi # ValidationLayer Generators 118*b7893ccfSSadaf Ebrahimi # Options for thread safety header code-generation 119*b7893ccfSSadaf Ebrahimi genOpts['thread_safety.h'] = [ 120*b7893ccfSSadaf Ebrahimi ThreadOutputGenerator, 121*b7893ccfSSadaf Ebrahimi ThreadGeneratorOptions( 122*b7893ccfSSadaf Ebrahimi conventions = conventions, 123*b7893ccfSSadaf Ebrahimi filename = 'thread_safety.h', 124*b7893ccfSSadaf Ebrahimi directory = directory, 125*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 126*b7893ccfSSadaf Ebrahimi profile = None, 127*b7893ccfSSadaf Ebrahimi versions = featuresPat, 128*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 129*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 130*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 131*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 132*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 133*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 134*b7893ccfSSadaf Ebrahimi protectFeature = False, 135*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 136*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 137*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 138*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 139*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 140*b7893ccfSSadaf Ebrahimi ] 141*b7893ccfSSadaf Ebrahimi 142*b7893ccfSSadaf Ebrahimi # Options for thread safety source code-generation 143*b7893ccfSSadaf Ebrahimi genOpts['thread_safety.cpp'] = [ 144*b7893ccfSSadaf Ebrahimi ThreadOutputGenerator, 145*b7893ccfSSadaf Ebrahimi ThreadGeneratorOptions( 146*b7893ccfSSadaf Ebrahimi conventions = conventions, 147*b7893ccfSSadaf Ebrahimi filename = 'thread_safety.cpp', 148*b7893ccfSSadaf Ebrahimi directory = directory, 149*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 150*b7893ccfSSadaf Ebrahimi profile = None, 151*b7893ccfSSadaf Ebrahimi versions = featuresPat, 152*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 153*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 154*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 155*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 156*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 157*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 158*b7893ccfSSadaf Ebrahimi protectFeature = False, 159*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 160*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 161*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 162*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 163*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 164*b7893ccfSSadaf Ebrahimi ] 165*b7893ccfSSadaf Ebrahimi 166*b7893ccfSSadaf Ebrahimi # Options for stateless validation source file 167*b7893ccfSSadaf Ebrahimi genOpts['parameter_validation.cpp'] = [ 168*b7893ccfSSadaf Ebrahimi ParameterValidationOutputGenerator, 169*b7893ccfSSadaf Ebrahimi ParameterValidationGeneratorOptions( 170*b7893ccfSSadaf Ebrahimi conventions = conventions, 171*b7893ccfSSadaf Ebrahimi filename = 'parameter_validation.cpp', 172*b7893ccfSSadaf Ebrahimi directory = directory, 173*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 174*b7893ccfSSadaf Ebrahimi profile = None, 175*b7893ccfSSadaf Ebrahimi versions = featuresPat, 176*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 177*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 178*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 179*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 180*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 181*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 182*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 183*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 184*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 185*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 186*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 187*b7893ccfSSadaf Ebrahimi valid_usage_path = args.scripts) 188*b7893ccfSSadaf Ebrahimi ] 189*b7893ccfSSadaf Ebrahimi 190*b7893ccfSSadaf Ebrahimi # Options for stateless validation source file 191*b7893ccfSSadaf Ebrahimi genOpts['parameter_validation.h'] = [ 192*b7893ccfSSadaf Ebrahimi ParameterValidationOutputGenerator, 193*b7893ccfSSadaf Ebrahimi ParameterValidationGeneratorOptions( 194*b7893ccfSSadaf Ebrahimi conventions = conventions, 195*b7893ccfSSadaf Ebrahimi filename = 'parameter_validation.h', 196*b7893ccfSSadaf Ebrahimi directory = directory, 197*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 198*b7893ccfSSadaf Ebrahimi profile = None, 199*b7893ccfSSadaf Ebrahimi versions = featuresPat, 200*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 201*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 202*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 203*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 204*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 205*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 206*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 207*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 208*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 209*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 210*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 211*b7893ccfSSadaf Ebrahimi valid_usage_path = args.scripts) 212*b7893ccfSSadaf Ebrahimi ] 213*b7893ccfSSadaf Ebrahimi 214*b7893ccfSSadaf Ebrahimi # Options for object_tracker code-generated validation routines 215*b7893ccfSSadaf Ebrahimi genOpts['object_tracker.cpp'] = [ 216*b7893ccfSSadaf Ebrahimi ObjectTrackerOutputGenerator, 217*b7893ccfSSadaf Ebrahimi ObjectTrackerGeneratorOptions( 218*b7893ccfSSadaf Ebrahimi conventions = conventions, 219*b7893ccfSSadaf Ebrahimi filename = 'object_tracker.cpp', 220*b7893ccfSSadaf Ebrahimi directory = directory, 221*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 222*b7893ccfSSadaf Ebrahimi profile = None, 223*b7893ccfSSadaf Ebrahimi versions = featuresPat, 224*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 225*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 226*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 227*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 228*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 229*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 230*b7893ccfSSadaf Ebrahimi protectFeature = False, 231*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 232*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 233*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 234*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 235*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 236*b7893ccfSSadaf Ebrahimi valid_usage_path = args.scripts) 237*b7893ccfSSadaf Ebrahimi ] 238*b7893ccfSSadaf Ebrahimi 239*b7893ccfSSadaf Ebrahimi # Options for object_tracker code-generated prototypes 240*b7893ccfSSadaf Ebrahimi genOpts['object_tracker.h'] = [ 241*b7893ccfSSadaf Ebrahimi ObjectTrackerOutputGenerator, 242*b7893ccfSSadaf Ebrahimi ObjectTrackerGeneratorOptions( 243*b7893ccfSSadaf Ebrahimi conventions = conventions, 244*b7893ccfSSadaf Ebrahimi filename = 'object_tracker.h', 245*b7893ccfSSadaf Ebrahimi directory = directory, 246*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 247*b7893ccfSSadaf Ebrahimi profile = None, 248*b7893ccfSSadaf Ebrahimi versions = featuresPat, 249*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 250*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 251*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 252*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 253*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 254*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 255*b7893ccfSSadaf Ebrahimi protectFeature = False, 256*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 257*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 258*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 259*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 260*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 261*b7893ccfSSadaf Ebrahimi valid_usage_path = args.scripts) 262*b7893ccfSSadaf Ebrahimi ] 263*b7893ccfSSadaf Ebrahimi 264*b7893ccfSSadaf Ebrahimi # Options for dispatch table helper generator 265*b7893ccfSSadaf Ebrahimi genOpts['vk_dispatch_table_helper.h'] = [ 266*b7893ccfSSadaf Ebrahimi DispatchTableHelperOutputGenerator, 267*b7893ccfSSadaf Ebrahimi DispatchTableHelperOutputGeneratorOptions( 268*b7893ccfSSadaf Ebrahimi conventions = conventions, 269*b7893ccfSSadaf Ebrahimi filename = 'vk_dispatch_table_helper.h', 270*b7893ccfSSadaf Ebrahimi directory = directory, 271*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 272*b7893ccfSSadaf Ebrahimi profile = None, 273*b7893ccfSSadaf Ebrahimi versions = featuresPat, 274*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 275*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 276*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 277*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 278*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 279*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 280*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 281*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 282*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 283*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 284*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 285*b7893ccfSSadaf Ebrahimi ] 286*b7893ccfSSadaf Ebrahimi 287*b7893ccfSSadaf Ebrahimi # Options for Layer dispatch table generator 288*b7893ccfSSadaf Ebrahimi genOpts['vk_layer_dispatch_table.h'] = [ 289*b7893ccfSSadaf Ebrahimi LayerDispatchTableOutputGenerator, 290*b7893ccfSSadaf Ebrahimi LayerDispatchTableGeneratorOptions( 291*b7893ccfSSadaf Ebrahimi conventions = conventions, 292*b7893ccfSSadaf Ebrahimi filename = 'vk_layer_dispatch_table.h', 293*b7893ccfSSadaf Ebrahimi directory = directory, 294*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 295*b7893ccfSSadaf Ebrahimi profile = None, 296*b7893ccfSSadaf Ebrahimi versions = featuresPat, 297*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 298*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 299*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 300*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 301*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 302*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 303*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 304*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 305*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 306*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 307*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 308*b7893ccfSSadaf Ebrahimi ] 309*b7893ccfSSadaf Ebrahimi 310*b7893ccfSSadaf Ebrahimi # Helper file generator options for vk_enum_string_helper.h 311*b7893ccfSSadaf Ebrahimi genOpts['vk_enum_string_helper.h'] = [ 312*b7893ccfSSadaf Ebrahimi HelperFileOutputGenerator, 313*b7893ccfSSadaf Ebrahimi HelperFileOutputGeneratorOptions( 314*b7893ccfSSadaf Ebrahimi conventions = conventions, 315*b7893ccfSSadaf Ebrahimi filename = 'vk_enum_string_helper.h', 316*b7893ccfSSadaf Ebrahimi directory = directory, 317*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 318*b7893ccfSSadaf Ebrahimi profile = None, 319*b7893ccfSSadaf Ebrahimi versions = featuresPat, 320*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 321*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 322*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 323*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 324*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 325*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 326*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 327*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 328*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 329*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 330*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 331*b7893ccfSSadaf Ebrahimi helper_file_type = 'enum_string_header') 332*b7893ccfSSadaf Ebrahimi ] 333*b7893ccfSSadaf Ebrahimi 334*b7893ccfSSadaf Ebrahimi # Helper file generator options for vk_safe_struct.h 335*b7893ccfSSadaf Ebrahimi genOpts['vk_safe_struct.h'] = [ 336*b7893ccfSSadaf Ebrahimi HelperFileOutputGenerator, 337*b7893ccfSSadaf Ebrahimi HelperFileOutputGeneratorOptions( 338*b7893ccfSSadaf Ebrahimi conventions = conventions, 339*b7893ccfSSadaf Ebrahimi filename = 'vk_safe_struct.h', 340*b7893ccfSSadaf Ebrahimi directory = directory, 341*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 342*b7893ccfSSadaf Ebrahimi profile = None, 343*b7893ccfSSadaf Ebrahimi versions = featuresPat, 344*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 345*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 346*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 347*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 348*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 349*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 350*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 351*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 352*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 353*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 354*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 355*b7893ccfSSadaf Ebrahimi helper_file_type = 'safe_struct_header') 356*b7893ccfSSadaf Ebrahimi ] 357*b7893ccfSSadaf Ebrahimi 358*b7893ccfSSadaf Ebrahimi # Helper file generator options for vk_safe_struct.cpp 359*b7893ccfSSadaf Ebrahimi genOpts['vk_safe_struct.cpp'] = [ 360*b7893ccfSSadaf Ebrahimi HelperFileOutputGenerator, 361*b7893ccfSSadaf Ebrahimi HelperFileOutputGeneratorOptions( 362*b7893ccfSSadaf Ebrahimi conventions = conventions, 363*b7893ccfSSadaf Ebrahimi filename = 'vk_safe_struct.cpp', 364*b7893ccfSSadaf Ebrahimi directory = directory, 365*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 366*b7893ccfSSadaf Ebrahimi profile = None, 367*b7893ccfSSadaf Ebrahimi versions = featuresPat, 368*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 369*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 370*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 371*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 372*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 373*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 374*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 375*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 376*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 377*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 378*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 379*b7893ccfSSadaf Ebrahimi helper_file_type = 'safe_struct_source') 380*b7893ccfSSadaf Ebrahimi ] 381*b7893ccfSSadaf Ebrahimi 382*b7893ccfSSadaf Ebrahimi # Helper file generator options for vk_object_types.h 383*b7893ccfSSadaf Ebrahimi genOpts['vk_object_types.h'] = [ 384*b7893ccfSSadaf Ebrahimi HelperFileOutputGenerator, 385*b7893ccfSSadaf Ebrahimi HelperFileOutputGeneratorOptions( 386*b7893ccfSSadaf Ebrahimi conventions = conventions, 387*b7893ccfSSadaf Ebrahimi filename = 'vk_object_types.h', 388*b7893ccfSSadaf Ebrahimi directory = directory, 389*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 390*b7893ccfSSadaf Ebrahimi profile = None, 391*b7893ccfSSadaf Ebrahimi versions = featuresPat, 392*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 393*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 394*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 395*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 396*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 397*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 398*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 399*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 400*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 401*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 402*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 403*b7893ccfSSadaf Ebrahimi helper_file_type = 'object_types_header') 404*b7893ccfSSadaf Ebrahimi ] 405*b7893ccfSSadaf Ebrahimi 406*b7893ccfSSadaf Ebrahimi # Helper file generator options for extension_helper.h 407*b7893ccfSSadaf Ebrahimi genOpts['vk_extension_helper.h'] = [ 408*b7893ccfSSadaf Ebrahimi HelperFileOutputGenerator, 409*b7893ccfSSadaf Ebrahimi HelperFileOutputGeneratorOptions( 410*b7893ccfSSadaf Ebrahimi conventions = conventions, 411*b7893ccfSSadaf Ebrahimi filename = 'vk_extension_helper.h', 412*b7893ccfSSadaf Ebrahimi directory = directory, 413*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 414*b7893ccfSSadaf Ebrahimi profile = None, 415*b7893ccfSSadaf Ebrahimi versions = featuresPat, 416*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 417*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 418*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 419*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 420*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 421*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 422*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 423*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 424*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 425*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 426*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 427*b7893ccfSSadaf Ebrahimi helper_file_type = 'extension_helper_header') 428*b7893ccfSSadaf Ebrahimi ] 429*b7893ccfSSadaf Ebrahimi 430*b7893ccfSSadaf Ebrahimi # Helper file generator options for typemap_helper.h 431*b7893ccfSSadaf Ebrahimi genOpts['vk_typemap_helper.h'] = [ 432*b7893ccfSSadaf Ebrahimi HelperFileOutputGenerator, 433*b7893ccfSSadaf Ebrahimi HelperFileOutputGeneratorOptions( 434*b7893ccfSSadaf Ebrahimi conventions = conventions, 435*b7893ccfSSadaf Ebrahimi filename = 'vk_typemap_helper.h', 436*b7893ccfSSadaf Ebrahimi directory = directory, 437*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 438*b7893ccfSSadaf Ebrahimi profile = None, 439*b7893ccfSSadaf Ebrahimi versions = featuresPat, 440*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 441*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 442*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 443*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 444*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 445*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 446*b7893ccfSSadaf Ebrahimi protectFeature = False, 447*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 448*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 449*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 450*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 451*b7893ccfSSadaf Ebrahimi expandEnumerants = False, 452*b7893ccfSSadaf Ebrahimi helper_file_type = 'typemap_helper_header') 453*b7893ccfSSadaf Ebrahimi ] 454*b7893ccfSSadaf Ebrahimi 455*b7893ccfSSadaf Ebrahimi # Layer chassis related generation structs 456*b7893ccfSSadaf Ebrahimi # Options for layer chassis header 457*b7893ccfSSadaf Ebrahimi genOpts['chassis.h'] = [ 458*b7893ccfSSadaf Ebrahimi LayerChassisOutputGenerator, 459*b7893ccfSSadaf Ebrahimi LayerChassisGeneratorOptions( 460*b7893ccfSSadaf Ebrahimi conventions = conventions, 461*b7893ccfSSadaf Ebrahimi filename = 'chassis.h', 462*b7893ccfSSadaf Ebrahimi directory = directory, 463*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 464*b7893ccfSSadaf Ebrahimi profile = None, 465*b7893ccfSSadaf Ebrahimi versions = featuresPat, 466*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 467*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 468*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 469*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 470*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 471*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 472*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 473*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 474*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 475*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 476*b7893ccfSSadaf Ebrahimi helper_file_type = 'layer_chassis_header', 477*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 478*b7893ccfSSadaf Ebrahimi ] 479*b7893ccfSSadaf Ebrahimi 480*b7893ccfSSadaf Ebrahimi # Options for layer chassis source file 481*b7893ccfSSadaf Ebrahimi genOpts['chassis.cpp'] = [ 482*b7893ccfSSadaf Ebrahimi LayerChassisOutputGenerator, 483*b7893ccfSSadaf Ebrahimi LayerChassisGeneratorOptions( 484*b7893ccfSSadaf Ebrahimi conventions = conventions, 485*b7893ccfSSadaf Ebrahimi filename = 'chassis.cpp', 486*b7893ccfSSadaf Ebrahimi directory = directory, 487*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 488*b7893ccfSSadaf Ebrahimi profile = None, 489*b7893ccfSSadaf Ebrahimi versions = featuresPat, 490*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 491*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 492*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 493*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 494*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 495*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 496*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 497*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 498*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 499*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 500*b7893ccfSSadaf Ebrahimi helper_file_type = 'layer_chassis_source', 501*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 502*b7893ccfSSadaf Ebrahimi ] 503*b7893ccfSSadaf Ebrahimi 504*b7893ccfSSadaf Ebrahimi # Options for layer chassis dispatch source file 505*b7893ccfSSadaf Ebrahimi genOpts['layer_chassis_dispatch.cpp'] = [ 506*b7893ccfSSadaf Ebrahimi LayerChassisDispatchOutputGenerator, 507*b7893ccfSSadaf Ebrahimi LayerChassisDispatchGeneratorOptions( 508*b7893ccfSSadaf Ebrahimi conventions = conventions, 509*b7893ccfSSadaf Ebrahimi filename = 'layer_chassis_dispatch.cpp', 510*b7893ccfSSadaf Ebrahimi directory = directory, 511*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 512*b7893ccfSSadaf Ebrahimi profile = None, 513*b7893ccfSSadaf Ebrahimi versions = featuresPat, 514*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 515*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 516*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 517*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 518*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 519*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 520*b7893ccfSSadaf Ebrahimi protectFeature = False, 521*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 522*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 523*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 524*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 525*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 526*b7893ccfSSadaf Ebrahimi ] 527*b7893ccfSSadaf Ebrahimi 528*b7893ccfSSadaf Ebrahimi # Options for layer chassis dispatch header file 529*b7893ccfSSadaf Ebrahimi genOpts['layer_chassis_dispatch.h'] = [ 530*b7893ccfSSadaf Ebrahimi LayerChassisDispatchOutputGenerator, 531*b7893ccfSSadaf Ebrahimi LayerChassisDispatchGeneratorOptions( 532*b7893ccfSSadaf Ebrahimi conventions = conventions, 533*b7893ccfSSadaf Ebrahimi filename = 'layer_chassis_dispatch.h', 534*b7893ccfSSadaf Ebrahimi directory = directory, 535*b7893ccfSSadaf Ebrahimi apiname = 'vulkan', 536*b7893ccfSSadaf Ebrahimi profile = None, 537*b7893ccfSSadaf Ebrahimi versions = featuresPat, 538*b7893ccfSSadaf Ebrahimi emitversions = featuresPat, 539*b7893ccfSSadaf Ebrahimi defaultExtensions = 'vulkan', 540*b7893ccfSSadaf Ebrahimi addExtensions = addExtensionsPat, 541*b7893ccfSSadaf Ebrahimi removeExtensions = removeExtensionsPat, 542*b7893ccfSSadaf Ebrahimi emitExtensions = emitExtensionsPat, 543*b7893ccfSSadaf Ebrahimi prefixText = prefixStrings + vkPrefixStrings, 544*b7893ccfSSadaf Ebrahimi protectFeature = False, 545*b7893ccfSSadaf Ebrahimi apicall = 'VKAPI_ATTR ', 546*b7893ccfSSadaf Ebrahimi apientry = 'VKAPI_CALL ', 547*b7893ccfSSadaf Ebrahimi apientryp = 'VKAPI_PTR *', 548*b7893ccfSSadaf Ebrahimi alignFuncParam = 48, 549*b7893ccfSSadaf Ebrahimi expandEnumerants = False) 550*b7893ccfSSadaf Ebrahimi ] 551*b7893ccfSSadaf Ebrahimi 552*b7893ccfSSadaf Ebrahimi 553*b7893ccfSSadaf Ebrahimi# Generate a target based on the options in the matching genOpts{} object. 554*b7893ccfSSadaf Ebrahimi# This is encapsulated in a function so it can be profiled and/or timed. 555*b7893ccfSSadaf Ebrahimi# The args parameter is an parsed argument object containing the following 556*b7893ccfSSadaf Ebrahimi# fields that are used: 557*b7893ccfSSadaf Ebrahimi# target - target to generate 558*b7893ccfSSadaf Ebrahimi# directory - directory to generate it in 559*b7893ccfSSadaf Ebrahimi# protect - True if re-inclusion wrappers should be created 560*b7893ccfSSadaf Ebrahimi# extensions - list of additional extensions to include in generated 561*b7893ccfSSadaf Ebrahimi# interfaces 562*b7893ccfSSadaf Ebrahimidef genTarget(args): 563*b7893ccfSSadaf Ebrahimi global genOpts 564*b7893ccfSSadaf Ebrahimi 565*b7893ccfSSadaf Ebrahimi # Create generator options with specified parameters 566*b7893ccfSSadaf Ebrahimi makeGenOpts(args) 567*b7893ccfSSadaf Ebrahimi 568*b7893ccfSSadaf Ebrahimi if (args.target in genOpts.keys()): 569*b7893ccfSSadaf Ebrahimi createGenerator = genOpts[args.target][0] 570*b7893ccfSSadaf Ebrahimi options = genOpts[args.target][1] 571*b7893ccfSSadaf Ebrahimi 572*b7893ccfSSadaf Ebrahimi if not args.quiet: 573*b7893ccfSSadaf Ebrahimi write('* Building', options.filename, file=sys.stderr) 574*b7893ccfSSadaf Ebrahimi write('* options.versions =', options.versions, file=sys.stderr) 575*b7893ccfSSadaf Ebrahimi write('* options.emitversions =', options.emitversions, file=sys.stderr) 576*b7893ccfSSadaf Ebrahimi write('* options.defaultExtensions =', options.defaultExtensions, file=sys.stderr) 577*b7893ccfSSadaf Ebrahimi write('* options.addExtensions =', options.addExtensions, file=sys.stderr) 578*b7893ccfSSadaf Ebrahimi write('* options.removeExtensions =', options.removeExtensions, file=sys.stderr) 579*b7893ccfSSadaf Ebrahimi write('* options.emitExtensions =', options.emitExtensions, file=sys.stderr) 580*b7893ccfSSadaf Ebrahimi 581*b7893ccfSSadaf Ebrahimi startTimer(args.time) 582*b7893ccfSSadaf Ebrahimi gen = createGenerator(errFile=errWarn, 583*b7893ccfSSadaf Ebrahimi warnFile=errWarn, 584*b7893ccfSSadaf Ebrahimi diagFile=diag) 585*b7893ccfSSadaf Ebrahimi reg.setGenerator(gen) 586*b7893ccfSSadaf Ebrahimi reg.apiGen(options) 587*b7893ccfSSadaf Ebrahimi 588*b7893ccfSSadaf Ebrahimi if not args.quiet: 589*b7893ccfSSadaf Ebrahimi write('* Generated', options.filename, file=sys.stderr) 590*b7893ccfSSadaf Ebrahimi endTimer(args.time, '* Time to generate ' + options.filename + ' =') 591*b7893ccfSSadaf Ebrahimi else: 592*b7893ccfSSadaf Ebrahimi write('No generator options for unknown target:', 593*b7893ccfSSadaf Ebrahimi args.target, file=sys.stderr) 594*b7893ccfSSadaf Ebrahimi 595*b7893ccfSSadaf Ebrahimi# -feature name 596*b7893ccfSSadaf Ebrahimi# -extension name 597*b7893ccfSSadaf Ebrahimi# For both, "name" may be a single name, or a space-separated list 598*b7893ccfSSadaf Ebrahimi# of names, or a regular expression. 599*b7893ccfSSadaf Ebrahimiif __name__ == '__main__': 600*b7893ccfSSadaf Ebrahimi parser = argparse.ArgumentParser() 601*b7893ccfSSadaf Ebrahimi 602*b7893ccfSSadaf Ebrahimi parser.add_argument('-defaultExtensions', action='store', 603*b7893ccfSSadaf Ebrahimi default='vulkan', 604*b7893ccfSSadaf Ebrahimi help='Specify a single class of extensions to add to targets') 605*b7893ccfSSadaf Ebrahimi parser.add_argument('-extension', action='append', 606*b7893ccfSSadaf Ebrahimi default=[], 607*b7893ccfSSadaf Ebrahimi help='Specify an extension or extensions to add to targets') 608*b7893ccfSSadaf Ebrahimi parser.add_argument('-removeExtensions', action='append', 609*b7893ccfSSadaf Ebrahimi default=[], 610*b7893ccfSSadaf Ebrahimi help='Specify an extension or extensions to remove from targets') 611*b7893ccfSSadaf Ebrahimi parser.add_argument('-emitExtensions', action='append', 612*b7893ccfSSadaf Ebrahimi default=[], 613*b7893ccfSSadaf Ebrahimi help='Specify an extension or extensions to emit in targets') 614*b7893ccfSSadaf Ebrahimi parser.add_argument('-feature', action='append', 615*b7893ccfSSadaf Ebrahimi default=[], 616*b7893ccfSSadaf Ebrahimi help='Specify a core API feature name or names to add to targets') 617*b7893ccfSSadaf Ebrahimi parser.add_argument('-debug', action='store_true', 618*b7893ccfSSadaf Ebrahimi help='Enable debugging') 619*b7893ccfSSadaf Ebrahimi parser.add_argument('-dump', action='store_true', 620*b7893ccfSSadaf Ebrahimi help='Enable dump to stderr') 621*b7893ccfSSadaf Ebrahimi parser.add_argument('-diagfile', action='store', 622*b7893ccfSSadaf Ebrahimi default=None, 623*b7893ccfSSadaf Ebrahimi help='Write diagnostics to specified file') 624*b7893ccfSSadaf Ebrahimi parser.add_argument('-errfile', action='store', 625*b7893ccfSSadaf Ebrahimi default=None, 626*b7893ccfSSadaf Ebrahimi help='Write errors and warnings to specified file instead of stderr') 627*b7893ccfSSadaf Ebrahimi parser.add_argument('-noprotect', dest='protect', action='store_false', 628*b7893ccfSSadaf Ebrahimi help='Disable inclusion protection in output headers') 629*b7893ccfSSadaf Ebrahimi parser.add_argument('-profile', action='store_true', 630*b7893ccfSSadaf Ebrahimi help='Enable profiling') 631*b7893ccfSSadaf Ebrahimi parser.add_argument('-registry', action='store', 632*b7893ccfSSadaf Ebrahimi default='vk.xml', 633*b7893ccfSSadaf Ebrahimi help='Use specified registry file instead of vk.xml') 634*b7893ccfSSadaf Ebrahimi parser.add_argument('-time', action='store_true', 635*b7893ccfSSadaf Ebrahimi help='Enable timing') 636*b7893ccfSSadaf Ebrahimi parser.add_argument('-validate', action='store_true', 637*b7893ccfSSadaf Ebrahimi help='Enable group validation') 638*b7893ccfSSadaf Ebrahimi parser.add_argument('-o', action='store', dest='directory', 639*b7893ccfSSadaf Ebrahimi default='.', 640*b7893ccfSSadaf Ebrahimi help='Create target and related files in specified directory') 641*b7893ccfSSadaf Ebrahimi parser.add_argument('target', metavar='target', nargs='?', 642*b7893ccfSSadaf Ebrahimi help='Specify target') 643*b7893ccfSSadaf Ebrahimi parser.add_argument('-quiet', action='store_true', default=True, 644*b7893ccfSSadaf Ebrahimi help='Suppress script output during normal execution.') 645*b7893ccfSSadaf Ebrahimi parser.add_argument('-verbose', action='store_false', dest='quiet', default=True, 646*b7893ccfSSadaf Ebrahimi help='Enable script output during normal execution.') 647*b7893ccfSSadaf Ebrahimi 648*b7893ccfSSadaf Ebrahimi # This argument tells us where to load the script from the Vulkan-Headers registry 649*b7893ccfSSadaf Ebrahimi parser.add_argument('-scripts', action='store', 650*b7893ccfSSadaf Ebrahimi help='Find additional scripts in this directory') 651*b7893ccfSSadaf Ebrahimi 652*b7893ccfSSadaf Ebrahimi args = parser.parse_args() 653*b7893ccfSSadaf Ebrahimi 654*b7893ccfSSadaf Ebrahimi # default scripts path to be same as registry 655*b7893ccfSSadaf Ebrahimi if not args.scripts: 656*b7893ccfSSadaf Ebrahimi args.scripts = os.path.dirname(args.registry) 657*b7893ccfSSadaf Ebrahimi 658*b7893ccfSSadaf Ebrahimi scripts_directory_path = os.path.dirname(os.path.abspath(__file__)) 659*b7893ccfSSadaf Ebrahimi registry_headers_path = os.path.join(scripts_directory_path, args.scripts) 660*b7893ccfSSadaf Ebrahimi sys.path.insert(0, registry_headers_path) 661*b7893ccfSSadaf Ebrahimi 662*b7893ccfSSadaf Ebrahimi from reg import * 663*b7893ccfSSadaf Ebrahimi from generator import write 664*b7893ccfSSadaf Ebrahimi from cgenerator import CGeneratorOptions, COutputGenerator 665*b7893ccfSSadaf Ebrahimi 666*b7893ccfSSadaf Ebrahimi # ValidationLayer Generator Modifications 667*b7893ccfSSadaf Ebrahimi from thread_safety_generator import ThreadGeneratorOptions, ThreadOutputGenerator 668*b7893ccfSSadaf Ebrahimi from parameter_validation_generator import ParameterValidationGeneratorOptions, ParameterValidationOutputGenerator 669*b7893ccfSSadaf Ebrahimi from object_tracker_generator import ObjectTrackerGeneratorOptions, ObjectTrackerOutputGenerator 670*b7893ccfSSadaf Ebrahimi from dispatch_table_helper_generator import DispatchTableHelperOutputGenerator, DispatchTableHelperOutputGeneratorOptions 671*b7893ccfSSadaf Ebrahimi from helper_file_generator import HelperFileOutputGenerator, HelperFileOutputGeneratorOptions 672*b7893ccfSSadaf Ebrahimi from layer_dispatch_table_generator import LayerDispatchTableOutputGenerator, LayerDispatchTableGeneratorOptions 673*b7893ccfSSadaf Ebrahimi from layer_chassis_generator import LayerChassisOutputGenerator, LayerChassisGeneratorOptions 674*b7893ccfSSadaf Ebrahimi from layer_chassis_dispatch_generator import LayerChassisDispatchOutputGenerator, LayerChassisDispatchGeneratorOptions 675*b7893ccfSSadaf Ebrahimi # Temporary workaround for vkconventions python2 compatibility 676*b7893ccfSSadaf Ebrahimi import abc; abc.ABC = abc.ABCMeta('ABC', (object,), {}) 677*b7893ccfSSadaf Ebrahimi from vkconventions import VulkanConventions 678*b7893ccfSSadaf Ebrahimi 679*b7893ccfSSadaf Ebrahimi # This splits arguments which are space-separated lists 680*b7893ccfSSadaf Ebrahimi args.feature = [name for arg in args.feature for name in arg.split()] 681*b7893ccfSSadaf Ebrahimi args.extension = [name for arg in args.extension for name in arg.split()] 682*b7893ccfSSadaf Ebrahimi 683*b7893ccfSSadaf Ebrahimi # Load & parse registry 684*b7893ccfSSadaf Ebrahimi reg = Registry() 685*b7893ccfSSadaf Ebrahimi 686*b7893ccfSSadaf Ebrahimi startTimer(args.time) 687*b7893ccfSSadaf Ebrahimi tree = etree.parse(args.registry) 688*b7893ccfSSadaf Ebrahimi endTimer(args.time, '* Time to make ElementTree =') 689*b7893ccfSSadaf Ebrahimi 690*b7893ccfSSadaf Ebrahimi if args.debug: 691*b7893ccfSSadaf Ebrahimi pdb.run('reg.loadElementTree(tree)') 692*b7893ccfSSadaf Ebrahimi else: 693*b7893ccfSSadaf Ebrahimi startTimer(args.time) 694*b7893ccfSSadaf Ebrahimi reg.loadElementTree(tree) 695*b7893ccfSSadaf Ebrahimi endTimer(args.time, '* Time to parse ElementTree =') 696*b7893ccfSSadaf Ebrahimi 697*b7893ccfSSadaf Ebrahimi if (args.validate): 698*b7893ccfSSadaf Ebrahimi reg.validateGroups() 699*b7893ccfSSadaf Ebrahimi 700*b7893ccfSSadaf Ebrahimi if (args.dump): 701*b7893ccfSSadaf Ebrahimi write('* Dumping registry to regdump.txt', file=sys.stderr) 702*b7893ccfSSadaf Ebrahimi reg.dumpReg(filehandle = open('regdump.txt', 'w', encoding='utf-8')) 703*b7893ccfSSadaf Ebrahimi 704*b7893ccfSSadaf Ebrahimi # create error/warning & diagnostic files 705*b7893ccfSSadaf Ebrahimi if (args.errfile): 706*b7893ccfSSadaf Ebrahimi errWarn = open(args.errfile, 'w', encoding='utf-8') 707*b7893ccfSSadaf Ebrahimi else: 708*b7893ccfSSadaf Ebrahimi errWarn = sys.stderr 709*b7893ccfSSadaf Ebrahimi 710*b7893ccfSSadaf Ebrahimi if (args.diagfile): 711*b7893ccfSSadaf Ebrahimi diag = open(args.diagfile, 'w', encoding='utf-8') 712*b7893ccfSSadaf Ebrahimi else: 713*b7893ccfSSadaf Ebrahimi diag = None 714*b7893ccfSSadaf Ebrahimi 715*b7893ccfSSadaf Ebrahimi if (args.debug): 716*b7893ccfSSadaf Ebrahimi pdb.run('genTarget(args)') 717*b7893ccfSSadaf Ebrahimi elif (args.profile): 718*b7893ccfSSadaf Ebrahimi import cProfile, pstats 719*b7893ccfSSadaf Ebrahimi cProfile.run('genTarget(args)', 'profile.txt') 720*b7893ccfSSadaf Ebrahimi p = pstats.Stats('profile.txt') 721*b7893ccfSSadaf Ebrahimi p.strip_dirs().sort_stats('time').print_stats(50) 722*b7893ccfSSadaf Ebrahimi else: 723*b7893ccfSSadaf Ebrahimi genTarget(args) 724