Quoting Jason Ekstrand (2017-09-21 08:32:21) > From: Lionel Landwerlin <lionel.g.landwer...@intel.com> > > New extensions can introduce additional enums. Most of the new enums > will have disjoint numbers from the initial enums. For example new > formats introduced by VK_IMG_format_pvrtc : > > VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177, > VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178, > VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179, > VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180, > VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181, > VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182, > VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183, > VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184, > VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000, > VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001, > VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002, > VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003, > VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004, > VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, > VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, > VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, > > It's obvious we can't have a single table for handling those anymore. > > Fortunately the enum values actually contain the number of the > extension that introduced the new enums. So we can build an > indirection table off the extension number and then index by > subtracting the first enum of the the format enum value. > > This change makes the extension number available in the generated enum > code. > > Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> > Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> > --- > src/vulkan/util/gen_enum_to_str.py | 24 ++++++++++++++++++++---- > 1 file changed, 20 insertions(+), 4 deletions(-) > > diff --git a/src/vulkan/util/gen_enum_to_str.py > b/src/vulkan/util/gen_enum_to_str.py > index 5281e89..8f32102 100644 > --- a/src/vulkan/util/gen_enum_to_str.py > +++ b/src/vulkan/util/gen_enum_to_str.py > @@ -101,6 +101,10 @@ H_TEMPLATE = Template(textwrap.dedent(u"""\ > #include <vulkan/vulkan.h> > #include <vulkan/vk_android_native_buffer.h> > > + % for ext in extensions: > + #define _${ext.name}_number (${ext.number}) > + % endfor > + > % for enum in enums: > const char * vk_${enum.name[2:]}_to_str(${enum.name} input); > % endfor > @@ -130,6 +134,14 @@ class NamedFactory(object): > return n > > > +class VkExtension(object): > + """Simple struct-like class representing extensions""" > + > + def __init__(self, name, number): > + self.name = name > + self.number = number > + > + > class VkEnum(object): > """Simple struct-like class representing a single Vulkan Enum.""" > > @@ -138,8 +150,8 @@ class VkEnum(object): > self.values = values or [] > > > -def parse_xml(enum_factory, filename): > - """Parse the XML file. Accumulate results into the efactory. > +def parse_xml(enum_factory, ext_factory, filename): > + """Parse the XML file. Accumulate results into the factories. > > This parser is a memory efficient iterative XML parser that returns a > list > of VkEnum objects. > @@ -160,6 +172,8 @@ def parse_xml(enum_factory, filename): > enum = enum_factory(elem.attrib['name']) > enum.values.extend([e.attrib['name'] for e in elem > if e.tag == 'enum']) > + elif event == 'start' and elem.tag == 'extension': > + ext_factory(elem.attrib['name'], int(elem.attrib['number']))
It would be better to nest the tags under the event if event == 'start': if elem.tag == '...' > elif event == 'end' and elem.tag == 'extension': > if elem.attrib['supported'] != 'vulkan': > continue > @@ -169,7 +183,6 @@ def parse_xml(enum_factory, filename): > > root.clear() > > - > def main(): > parser = argparse.ArgumentParser() > parser.add_argument('--xml', required=True, > @@ -183,9 +196,11 @@ def main(): > args = parser.parse_args() > > enum_factory = NamedFactory(VkEnum) > + ext_factory = NamedFactory(VkExtension) > for filename in args.xml_files: > - parse_xml(enum_factory, filename) > + parse_xml(enum_factory, ext_factory, filename) > enums=sorted(enum_factory.registry.values(), key=lambda e: e.name) > + extensions=sorted(ext_factory.registry.values(), key=lambda e: e.name) > > for template, file_ in [(C_TEMPLATE, os.path.join(args.outdir, > 'vk_enum_to_str.c')), > (H_TEMPLATE, os.path.join(args.outdir, > 'vk_enum_to_str.h'))]: > @@ -193,6 +208,7 @@ def main(): > f.write(template.render( > file=os.path.basename(__file__), > enums=enums, > + extensions=extensions, > copyright=COPYRIGHT, > FOREIGN_ENUM_VALUES=FOREIGN_ENUM_VALUES)) > > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev