aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMike Schuchardt <mikes@lunarg.com>2021-09-28 09:45:09 -0700
committerMike Schuchardt <mikes@lunarg.com>2021-09-28 15:29:55 -0700
commitcde128728af6983a49692051b1cf73ce8723dd9b (patch)
tree5a66b060fab7d15b01487e6ee03ae25f48af08d6 /scripts
parentbd6c95c544a28893289f1ae51cf57f6e466c9562 (diff)
downloadusermoji-cde128728af6983a49692051b1cf73ce8723dd9b.tar.xz
scripts: Fix codegen with hard-coded enum indices
Currently some of the generators use a fixed child index to locate extension enums, which will break if comment blocks are added near the top of an extension definition. This change makes the enum lookup more robust by searching for the expected enum name instead of using a hard-coded offset.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/mock_icd_generator.py25
-rw-r--r--scripts/vulkan_tools_helper_file_generator.py18
2 files changed, 24 insertions, 19 deletions
diff --git a/scripts/mock_icd_generator.py b/scripts/mock_icd_generator.py
index 64ea7dc6..d8b0739c 100644
--- a/scripts/mock_icd_generator.py
+++ b/scripts/mock_icd_generator.py
@@ -1,9 +1,9 @@
#!/usr/bin/python3 -i
#
-# Copyright (c) 2015-2017 The Khronos Group Inc.
-# Copyright (c) 2015-2017 Valve Corporation
-# Copyright (c) 2015-2017 LunarG, Inc.
-# Copyright (c) 2015-2017 Google Inc.
+# Copyright (c) 2015-2021 The Khronos Group Inc.
+# Copyright (c) 2015-2021 Valve Corporation
+# Copyright (c) 2015-2021 LunarG, Inc.
+# Copyright (c) 2015-2021 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -1202,12 +1202,17 @@ class MockICDOutputGenerator(OutputGenerator):
ignore_exts = ['VK_EXT_validation_cache', 'VK_KHR_portability_subset']
for ext in self.registry.tree.findall("extensions/extension"):
if ext.attrib['supported'] != 'disabled': # Only include enabled extensions
- if (ext.attrib['name'] in ignore_exts):
- pass
- elif (ext.attrib.get('type') and 'instance' == ext.attrib['type']):
- instance_exts.append(' {"%s", %s},' % (ext.attrib['name'], ext[0][0].attrib['value']))
- else:
- device_exts.append(' {"%s", %s},' % (ext.attrib['name'], ext[0][0].attrib['value']))
+ if (ext.attrib['name'] not in ignore_exts):
+ # Search for extension version enum
+ for enum in ext.findall('require/enum'):
+ if enum.get('name', '').endswith('_SPEC_VERSION'):
+ ext_version = enum.get('value')
+ if (ext.attrib.get('type') == 'instance'):
+ instance_exts.append(' {"%s", %s},' % (ext.attrib['name'], ext_version))
+ else:
+ device_exts.append(' {"%s", %s},' % (ext.attrib['name'], ext_version))
+ break
+
write('// Map of instance extension name to version', file=self.outFile)
write('static const std::unordered_map<std::string, uint32_t> instance_extension_map = {', file=self.outFile)
write('\n'.join(instance_exts), file=self.outFile)
diff --git a/scripts/vulkan_tools_helper_file_generator.py b/scripts/vulkan_tools_helper_file_generator.py
index 1b24a5e4..42ce0199 100644
--- a/scripts/vulkan_tools_helper_file_generator.py
+++ b/scripts/vulkan_tools_helper_file_generator.py
@@ -1,9 +1,9 @@
#!/usr/bin/python3 -i
#
-# Copyright (c) 2015-2017 The Khronos Group Inc.
-# Copyright (c) 2015-2017 Valve Corporation
-# Copyright (c) 2015-2017 LunarG, Inc.
-# Copyright (c) 2015-2017 Google Inc.
+# Copyright (c) 2015-2021 The Khronos Group Inc.
+# Copyright (c) 2015-2021 Valve Corporation
+# Copyright (c) 2015-2021 LunarG, Inc.
+# Copyright (c) 2015-2021 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -176,10 +176,10 @@ class HelperFileOutputGenerator(OutputGenerator):
if interface.tag != 'extension':
return
name = self.featureName
- nameElem = interface[0][1]
- name_define = nameElem.get('name')
- if 'EXTENSION_NAME' not in name_define:
- print("Error in vk.xml file -- extension name is not available")
+ for enum in interface.findall('require/enum'):
+ if enum.get('name', '').endswith('EXTENSION_NAME'):
+ name_define = enum.get('name')
+ break
requires = interface.get('requires')
if requires is not None:
required_extensions = requires.split(',')
@@ -241,7 +241,7 @@ class HelperFileOutputGenerator(OutputGenerator):
def paramIsPointer(self, param):
ispointer = False
for elem in param:
- if ((elem.tag is not 'type') and (elem.tail is not None)) and '*' in elem.tail:
+ if ((elem.tag != 'type') and (elem.tail is not None)) and '*' in elem.tail:
ispointer = True
return ispointer
#