[Mesa-dev] [PATCH 1/2] build: Stabilize some script outputs
Dylan Baker
dylan at pnwbakers.com
Thu Jul 5 15:38:27 UTC 2018
Quoting Mathieu Bridon (2018-06-27 03:37:38)
> In Python, dictionaries and sets are unordered, and as a result their
> is no guarantee that running this script twice will produce the same
> output.
Small nit: in python < 3.7 dicts are unordered. In cpython 3.6 (and pypy since
forever?) they are, in python 3.7 dicts are guaranteed to be ordered, and
OrderedDict is just an alias for dict.
>
> Using ordered dicts and explicitly sorting items makes the build more
> reproducible, and will make it possible to verify that we're not
> breaking anything when we move the build scripts to Python 3.
> ---
> src/amd/common/sid_tables.py | 2 +-
> src/compiler/nir/nir_algebraic.py | 3 ++-
> src/compiler/nir/nir_opt_algebraic.py | 3 ++-
> src/mapi/glapi/gen/glX_proto_size.py | 2 +-
> src/mapi/glapi/gen/gl_XML.py | 3 ++-
> 5 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/src/amd/common/sid_tables.py b/src/amd/common/sid_tables.py
> index 4e53acefa4..ca90f82535 100644
> --- a/src/amd/common/sid_tables.py
> +++ b/src/amd/common/sid_tables.py
> @@ -65,7 +65,7 @@ class StringTable:
> fragments = [
> '"%s\\0" /* %s */' % (
> te[0].encode('string_escape'),
> - ', '.join(str(idx) for idx in te[2])
> + ', '.join(str(idx) for idx in sorted(te[2]))
> )
> for te in self.table
> ]
> diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
> index d6784df004..847c59dbd8 100644
> --- a/src/compiler/nir/nir_algebraic.py
> +++ b/src/compiler/nir/nir_algebraic.py
> @@ -25,6 +25,7 @@
>
> from __future__ import print_function
> import ast
> +from collections import OrderedDict
> import itertools
> import struct
> import sys
> @@ -601,7 +602,7 @@ ${pass_name}(nir_shader *shader)
>
> class AlgebraicPass(object):
> def __init__(self, pass_name, transforms):
> - self.xform_dict = {}
> + self.xform_dict = OrderedDict()
> self.pass_name = pass_name
>
> error = False
> diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
> index db907df854..2f1cba398f 100644
> --- a/src/compiler/nir/nir_opt_algebraic.py
> +++ b/src/compiler/nir/nir_opt_algebraic.py
> @@ -23,6 +23,7 @@
> # Authors:
> # Jason Ekstrand (jason at jlekstrand.net)
>
> +from collections import OrderedDict
> import nir_algebraic
> import itertools
>
> @@ -628,7 +629,7 @@ optimizations = [
> 'options->lower_unpack_snorm_4x8'),
> ]
>
> -invert = {'feq': 'fne', 'fne': 'feq', 'fge': 'flt', 'flt': 'fge' }
> +invert = OrderedDict([('feq', 'fne'), ('fne', 'feq'), ('fge', 'flt'), ('flt', 'fge')])
>
> for left, right in list(itertools.combinations(invert.keys(), 2)) + zip(invert.keys(), invert.keys()):
> optimizations.append((('inot', ('ior(is_used_once)', (left, a, b), (right, c, d))),
> diff --git a/src/mapi/glapi/gen/glX_proto_size.py b/src/mapi/glapi/gen/glX_proto_size.py
> index e16dbab3e0..8dbb0af86d 100644
> --- a/src/mapi/glapi/gen/glX_proto_size.py
> +++ b/src/mapi/glapi/gen/glX_proto_size.py
> @@ -191,7 +191,7 @@ class glx_enum_function(object):
>
> print ' switch( e ) {'
>
> - for c in self.count:
> + for c in sorted(self.count):
> for e in self.count[c]:
> first = 1
>
> diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py
> index a5320e90a1..1bab5fee51 100644
> --- a/src/mapi/glapi/gen/gl_XML.py
> +++ b/src/mapi/glapi/gen/gl_XML.py
> @@ -24,6 +24,7 @@
> # Authors:
> # Ian Romanick <idr at us.ibm.com>
>
> +from collections import OrderedDict
> from decimal import Decimal
> import xml.etree.ElementTree as ET
> import re, sys, string
> @@ -861,7 +862,7 @@ class gl_item_factory(object):
>
> class gl_api(object):
> def __init__(self, factory):
> - self.functions_by_name = {}
> + self.functions_by_name = OrderedDict()
> self.enums_by_name = {}
> self.types_by_name = {}
>
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180705/c8b713fc/attachment.sig>
More information about the mesa-dev
mailing list