On 01/08/17 23:32, Jason Ekstrand wrote:
On Tue, Aug 1, 2017 at 2:07 PM, Lionel Landwerlin <lionel.g.landwer...@intel.com <mailto:lionel.g.landwer...@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.landwer...@intel.com>

        +
          def _init_exts_from_xml(xml):
              """ Walk the Vulkan XML and fill out extra extension
        information. """






_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to