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_arc...@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),



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to