anv/entrypoints_gen: Allow the string map to grow
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 20 Sep 2017 19:38:12 +0000 (12:38 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 7 Mar 2018 20:13:47 +0000 (12:13 -0800)
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
src/intel/vulkan/anv_entrypoints_gen.py

index aa47711d8b620379ce70ee2a293299d031885e69..4a910aed63e6653eb2c09ead108163a0b1785858 100644 (file)
@@ -24,6 +24,7 @@
 
 import argparse
 import functools
+import math
 import os
 import xml.etree.cElementTree as et
 
@@ -334,9 +335,7 @@ anv_lookup_entrypoint(const struct gen_device_info *devinfo, const char *name)
    return anv_resolve_entrypoint(devinfo, idx);
 }""", output_encoding='utf-8')
 
-HASH_SIZE = 256
 U32_MASK = 2**32 - 1
-HASH_MASK = HASH_SIZE - 1
 
 PRIME_FACTOR = 5024183
 PRIME_STEP = 19
@@ -354,6 +353,9 @@ class StringIntMapEntry(object):
 
         self.offset = None
 
+def round_to_pow2(x):
+    return 2**int(math.ceil(math.log(x, 2)))
+
 class StringIntMap(object):
     def __init__(self):
         self.baked = False
@@ -374,8 +376,8 @@ class StringIntMap(object):
             offset += len(entry.string) + 1
 
         # Save off some values that we'll need in C
-        self.hash_size = HASH_SIZE
-        self.hash_mask = HASH_SIZE - 1
+        self.hash_size = round_to_pow2(len(self.strings) * 1.25)
+        self.hash_mask = self.hash_size - 1
         self.prime_factor = PRIME_FACTOR
         self.prime_step = PRIME_STEP