gallium: Add cso convenience routine (from Keith's patch).
authorJosé Fonseca <jrfonseca@tungstengraphics.com>
Fri, 22 Feb 2008 08:22:32 +0000 (17:22 +0900)
committerJosé Fonseca <jrfonseca@tungstengraphics.com>
Fri, 22 Feb 2008 15:51:33 +0000 (00:51 +0900)
src/gallium/auxiliary/cso_cache/cso_cache.c
src/gallium/auxiliary/cso_cache/cso_hash.h

index 9e77e07..776ce6b 100644 (file)
@@ -132,6 +132,26 @@ cso_find_state(struct cso_cache *sc,
    return cso_hash_find(hash, hash_key);
 }
 
+
+void *cso_hash_find_data_from_template( struct cso_hash *hash,
+                                       unsigned hash_key, 
+                                       void *templ,
+                                       int size )
+{
+   struct cso_hash_iter iter = cso_hash_find(hash, hash_key);
+   while (!cso_hash_iter_is_null(iter)) {
+      void *iter_data = cso_hash_iter_data(iter);
+      if (!memcmp(iter_data, templ, size)) {
+        /* Return the payload: 
+         */
+         return (unsigned char *)iter_data + size;
+      }
+      iter = cso_hash_iter_next(iter);
+   }
+   return NULL;
+}
+
+
 struct cso_hash_iter cso_find_state_template(struct cso_cache *sc,
                                              unsigned hash_key, enum cso_cache_type type,
                                              void *templ)
index b4aa111..ffd99be 100644 (file)
@@ -59,4 +59,13 @@ void     *cso_hash_iter_data(struct cso_hash_iter iter);
 struct cso_hash_iter cso_hash_iter_next(struct cso_hash_iter iter);
 struct cso_hash_iter cso_hash_iter_prev(struct cso_hash_iter iter);
 
+
+/* KW: a convenience routine: 
+ */
+void *cso_hash_find_data_from_template( struct cso_hash *hash,
+                                       unsigned hash_key, 
+                                       void *templ,
+                                       int size );
+
+
 #endif