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 9e77e0774ddf0ea8e78677d3ee1813d4434b8fcf..776ce6bacf8d6616add9995675b6d81137183a11 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 b4aa111860fe2c86fb1ec75025aa01d43ec19b41..ffd99beba954dec8f71d505ed5b11dad12cd3e3e 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