[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