[Mesa-dev] [PATCH 2/5] anv: Add MAX_API_VERSION to anv_extensions.py

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue Aug 1 22:43:54 UTC 2017


On 01/08/17 23:32, Jason Ekstrand wrote:
> On Tue, Aug 1, 2017 at 2:07 PM, Lionel Landwerlin 
> <lionel.g.landwerlin at intel.com <mailto:lionel.g.landwerlin at intel.com>> 
> wrote:
>
>     On 01/08/17 19:54, Jason Ekstrand wrote:
>
>         The VkVersion class is probably overkill but it makes it
>         really easy to
>         compare versions in a way that's safe without the caller
>         having to think
>         about patch vs. no patch.
>         ---
>           src/intel/vulkan/anv_entrypoints_gen.py |  4 +--
>           src/intel/vulkan/anv_extensions.py      | 43
>         +++++++++++++++++++++++++++++++++
>           2 files changed, 44 insertions(+), 3 deletions(-)
>
>         diff --git a/src/intel/vulkan/anv_entrypoints_gen.py
>         b/src/intel/vulkan/anv_entrypoints_gen.py
>         index 9177a94..f5c527e 100644
>         --- a/src/intel/vulkan/anv_entrypoints_gen.py
>         +++ b/src/intel/vulkan/anv_entrypoints_gen.py
>         @@ -32,8 +32,6 @@ from mako.template import Template
>             from anv_extensions import *
>           -MAX_API_VERSION = 1.0
>         -
>           # We generate a static hash table for entry point lookup
>           # (vkGetProcAddress). We use a linear congruential generator
>         for our hash
>           # function and a power-of-two size table. The prime numbers
>         are determined
>         @@ -262,7 +260,7 @@ def get_entrypoints(doc,
>         entrypoints_to_defines):
>               enabled_commands = set()
>               for feature in doc.findall('./feature'):
>                   assert feature.attrib['api'] == 'vulkan'
>         -        if float(feature.attrib['number']) > MAX_API_VERSION:
>         +        if VkVersion(feature.attrib['number']) > MAX_API_VERSION:
>                       continue
>                     for command in feature.findall('./require/command'):
>         diff --git a/src/intel/vulkan/anv_extensions.py
>         b/src/intel/vulkan/anv_extensions.py
>         index 0d243c6..7307cac 100644
>         --- a/src/intel/vulkan/anv_extensions.py
>         +++ b/src/intel/vulkan/anv_extensions.py
>         @@ -25,10 +25,14 @@ COPYRIGHT = """\
>           """
>             import argparse
>         +import copy
>         +import re
>           import xml.etree.cElementTree as et
>             from mako.template import Template
>           +MAX_API_VERSION = '1.0.54'
>         +
>           class Extension:
>               def __init__(self, name, ext_version, enable):
>         self.name <http://self.name> = name
>         @@ -64,6 +68,45 @@ EXTENSIONS = [
>               Extension('VK_KHX_multiview',        1, True),
>           ]
>           +class VkVersion:
>         +    def __init__(self, string):
>         +        split = string.split('.')
>         +        self.major = int(split[0])
>         +        self.minor = int(split[1])
>         +        if len(split) > 2:
>         +            assert len(split) == 3
>         +            self.patch = int(split[2])
>         +        else:
>         +            self.patch = None
>         +
>         +        # Sanity check.  The range bits are required by the
>         definition of the
>         +        # VK_MAKE_VERSION macro
>         +        assert self.major < 1024 and self.minor < 1024
>         +        assert self.patch is None or self.patch < 4096
>         +        assert(str(self) == string)
>         +
>         +    def __str__(self):
>         +        ver_list = [str(self.major), str(self.minor)]
>         +        if self.patch is not None:
>         +            ver_list.append(str(self.patch))
>         +        return '.'.join(ver_list)
>         +
>         +    def __int_ver(self):
>         +        # This is just an expansion of VK_VERSION
>         +        patch = self.patch if self.patch is not None else 0
>         +        return (self.major << 22) | (self.minor << 12) | patch
>         +
>         +    def __cmp__(self, other):
>         +        # If only one of them has a patch version, "ignore"
>         it by making
>         +        # other's patch version match self.
>         +        if (self.patch is None) != (other.patch is None):
>         +            other = copy.copy(other)
>         +            other.patch = self.patch
>         +
>         +        return self.__int_ver().__cmp__(other.__int_ver())
>         +
>         +MAX_API_VERSION = VkVersion(MAX_API_VERSION)
>
>
>     Why not just MAX_API_VERSION = VkVersion('1.0.54') ?
>
>
> Because I wanted the obvious declaration MAX_API_VERSION to go as high 
> up in the file as possible for readability.  VkVersion is an 
> annoyingly complicated class and I didn't want it cluttering the top 
> of the file.  The end result is this little bit of uglyness.  I'm not 
> sure if it was worth it.
>
> --Jason

Alright, I thought maybe I was missing something :

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

>         +
>           def _init_exts_from_xml(xml):
>               """ Walk the Vulkan XML and fill out extra extension
>         information. """
>
>
>
>
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170801/0b0579c2/attachment-0001.html>


More information about the mesa-dev mailing list