| 1316 | # This object handles all the parsing from the video.xml (i.e. Video Std header definitions) |
| 1317 | # It will fill in video standard definitions into the VulkanObject |
| 1318 | class _VideoStdGenerator(BaseGenerator): |
| 1319 | def __init__(self): |
| 1320 | BaseGenerator.__init__(self) |
| 1321 | self.vk.videoStd = VideoStd() |
| 1322 | |
| 1323 | # Track the current Video Std header we are processing |
| 1324 | self.currentVideoStdHeader = None |
| 1325 | |
| 1326 | def write(self, data): |
| 1327 | # We do not write anything here |
| 1328 | return |
| 1329 | |
| 1330 | def beginFile(self, genOpts): |
| 1331 | # We intentionally skip default BaseGenerator behavior |
| 1332 | OutputGenerator.beginFile(self, genOpts) |
| 1333 | |
| 1334 | def endFile(self): |
| 1335 | # Move parsed definitions to the Video Std definitions |
| 1336 | self.vk.videoStd.enums = self.vk.enums |
| 1337 | self.vk.videoStd.structs = self.vk.structs |
| 1338 | self.vk.videoStd.constants = self.vk.constants |
| 1339 | |
| 1340 | # We intentionally skip default BaseGenerator behavior |
| 1341 | OutputGenerator.endFile(self) |
| 1342 | |
| 1343 | def beginFeature(self, interface, emit): |
| 1344 | # We intentionally skip default BaseGenerator behavior |
| 1345 | OutputGenerator.beginFeature(self, interface, emit) |
| 1346 | |
| 1347 | # Only "extension" is possible in the video.xml, identifying the Video Std header |
| 1348 | assert interface.tag == 'extension' |
| 1349 | name = interface.get('name') |
| 1350 | version: (str | None) = None |
| 1351 | depends: list[str] = [] |
| 1352 | |
| 1353 | # Handle Video Std header version constant |
| 1354 | for enum in interface.findall('require/enum[@value]'): |
| 1355 | enumName = enum.get('name') |
| 1356 | if enumName.endswith('_SPEC_VERSION'): |
| 1357 | version = enum.get('value') |
| 1358 | |
| 1359 | # Handle dependencies on other Video Std headers |
| 1360 | for type in interface.findall('require/type[@name]'): |
| 1361 | typeName = type.get('name') |
| 1362 | if typeName.startswith('vk_video/'): |
| 1363 | depends.append(typeName[len('vk_video/'):-len('.h')]) |
| 1364 | |
| 1365 | headerFile = f'vk_video/{name}.h' |
| 1366 | |
| 1367 | self.vk.videoStd.headers[name] = VideoStdHeader(name, version, headerFile, depends) |
| 1368 | |
| 1369 | self.currentVideoStdHeader = self.vk.videoStd.headers[name] |
| 1370 | |
| 1371 | # Handle constants here as that seems the most straightforward |
| 1372 | constantNames = [] |
| 1373 | for enum in interface.findall('require/enum[@type]'): |
| 1374 | constantNames.append(enum.get('name')) |
| 1375 | self.addConstants(constantNames) |