[Mesa-dev] [PATCH 03/15] mesa: Add a clone function to mesa hash
Timothy Arceri
t_arceri at yahoo.com.au
Mon Aug 26 18:10:32 PDT 2013
On 27/08/13 00:51, Brian Paul wrote:
> On 08/26/2013 04:43 AM, Timothy Arceri wrote:
>>
>> Signed-off-by: Timothy Arceri <t_arceri at yahoo.com.au>
>> ---
>> src/mesa/main/hash.c | 26 ++++++++++++++++++++++++++
>> src/mesa/main/hash.h | 3 +++
>> 2 files changed, 29 insertions(+)
>>
>> diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c
>> index 6591af9..8dde8b1 100644
>> --- a/src/mesa/main/hash.c
>> +++ b/src/mesa/main/hash.c
>> @@ -302,6 +302,32 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table,
>>
>>
>> /**
>> + * Clone all entries in a hash table, into a new table.
>> + *
>> + * \param table the hash table to clone
>> + */
>> +struct _mesa_HashTable *
>> +_mesa_HashClone(struct _mesa_HashTable *table)
>
> Can that be const qualified?
>
The cloned tables are to be edited after we clone them. Basically we
just want a copy of whats on the top of the stack when we do a push but
then the we want to be able to be able to add more ids to this copy if
we want to. I have a piglit test for push/popDebugGroup that shows what
I mean.
I will try to polish this up and submit it later today.
Or I'm I miss understanding what you are suggesting?
>
>> +{
>> + struct hash_entry *entry;
>> + struct _mesa_HashTable *clonetable;
>> +
>> + ASSERT(table);
>> + _glthread_LOCK_MUTEX(table->Mutex);
>> +
>> + clonetable = _mesa_NewHashTable();
>> + assert(clonetable);
>> + hash_table_foreach(table->ht, entry) {
>> + _mesa_HashInsert(clonetable, (GLint)(uintptr_t)entry->key,
>> entry->data);
>> + }
>> +
>> + _glthread_UNLOCK_MUTEX(table->Mutex);
>> +
>> + return clonetable;
>> +}
>> +
>> +
>> +/**
>> * Walk over all entries in a hash table, calling callback function
>> for each.
>> * Note: we use a separate mutex in this function to avoid a recursive
>> * locking deadlock (in case the callback calls _mesa_HashRemove())
>> and to
>> diff --git a/src/mesa/main/hash.h b/src/mesa/main/hash.h
>> index 142d284..9208701 100644
>> --- a/src/mesa/main/hash.h
>> +++ b/src/mesa/main/hash.h
>> @@ -50,6 +50,9 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table,
>> void (*callback)(GLuint key, void *data, void
>> *userData),
>> void *userData);
>>
>> +extern struct _mesa_HashTable *
>> +_mesa_HashClone(struct _mesa_HashTable *table);
>> +
>> extern void
>> _mesa_HashWalk(const struct _mesa_HashTable *table,
>> void (*callback)(GLuint key, void *data, void
>> *userData),
>>
>
More information about the mesa-dev
mailing list