[Mesa-dev] [PATCH] mesa/util: add a hash table wrapper which support 64-bit keys
Nicolai Hähnle
nhaehnle at gmail.com
Tue Jun 13 16:07:06 UTC 2017
On 13.06.2017 14:01, Grazvydas Ignotas wrote:
> On Tue, Jun 13, 2017 at 10:58 AM, Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>> Needed for bindless handles which are represented using
>> 64-bit unsigned integers. All hash table implementations should
>> be uniformized later on.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/util/hash_table.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> src/util/hash_table.h | 25 +++++++++
>> 2 files changed, 174 insertions(+)
>>
>> diff --git a/src/util/hash_table.c b/src/util/hash_table.c
>> index 9e643af8b23..c2b9210218a 100644
>> --- a/src/util/hash_table.c
>> +++ b/src/util/hash_table.c
>> @@ -47,6 +47,7 @@
>> #include "hash_table.h"
>> #include "ralloc.h"
>> #include "macros.h"
>> +#include "main/hash.h"
>>
>> static const uint32_t deleted_key_value;
>>
>> @@ -502,3 +503,151 @@ _mesa_key_pointer_equal(const void *a, const void *b)
>> {
>> return a == b;
>> }
>> +
>> +/**
>> + * Hash table wrapper which supports 64-bit keys.
>> + *
>> + * TODO: unify all hash table implementations.
>> + */
>> +#if !defined(MESA_ARCH_X86_64)
>> +
>> +struct hash_key_u64 {
>> + uint64_t value;
>> +};
>> +
>> +static uint32_t
>> +key_u64_hash(const void *key)
>> +{
>> + return _mesa_hash_data(key, sizeof(struct hash_key_u64));
>> +}
>> +
>> +static bool
>> +key_u64_equals(const void *a, const void *b)
>> +{
>> + struct hash_key_u64 *aa = (struct hash_key_u64 *)a;
>
> const struct hash_key_u64, and then you can drop the cast.
>
>> + struct hash_key_u64 *bb = (struct hash_key_u64 *)b;
>> +
>> + return aa->value == bb->value;
>> +}
>> +
>> +#endif
>> +
>> +struct hash_table_u64 *
>> +_mesa_hash_table_u64_create(void *mem_ctx)
>> +{
>> + struct hash_table_u64 *ht;
>> +
>> + ht = CALLOC_STRUCT(hash_table_u64);
>> + if (!ht)
>> + return NULL;
>> +
>> +#if !defined(MESA_ARCH_X86_64)
>
> I can't seem to find anything defining MESA_ARCH_X86_64 anywhere.
That's stuck in one of Samuel's other pending patches :)
> There is also nothing x86-64 specific here, what about doing
>
> if (sizeof(void *) == 8) {
>
> and letting the compiler optimizer to drop the other case?
I like that suggestion, actually, it makes sure both paths will always
build without compiler error.
With or without your suggestions, the patch is
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>> + ht->table = _mesa_hash_table_create(mem_ctx, key_u64_hash, key_u64_equals);
>> +#else
>> + ht->table = _mesa_hash_table_create(mem_ctx, _mesa_hash_pointer,
>> + _mesa_key_pointer_equal);
>> +#endif
>
> Gražvydas
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list