summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2008-04-23 13:32:41 -0400
committerZack Rusin <[email protected]>2008-04-23 13:32:41 -0400
commite1180c2d694851ed12e86027aa406ee20546e6d3 (patch)
tree64d2eb54933e021868bdf26f0d4fe680ffe5b116
parent4f93a3a680560940630c44be0066b72a86ff008a (diff)
fix the simple hash finding function and use it
-rw-r--r--src/gallium/auxiliary/cso_cache/cso_cache.c4
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_emit.c14
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_fetch.c17
3 files changed, 12 insertions, 23 deletions
diff --git a/src/gallium/auxiliary/cso_cache/cso_cache.c b/src/gallium/auxiliary/cso_cache/cso_cache.c
index 63464e07058..096875807be 100644
--- a/src/gallium/auxiliary/cso_cache/cso_cache.c
+++ b/src/gallium/auxiliary/cso_cache/cso_cache.c
@@ -255,9 +255,9 @@ void *cso_hash_find_data_from_template( struct cso_hash *hash,
while (!cso_hash_iter_is_null(iter)) {
void *iter_data = cso_hash_iter_data(iter);
if (!memcmp(iter_data, templ, size)) {
- /* Return the payload:
+ /* We found a match
*/
- return (unsigned char *)iter_data + size;
+ return iter_data;
}
iter = cso_hash_iter_next(iter);
}
diff --git a/src/gallium/auxiliary/draw/draw_pt_emit.c b/src/gallium/auxiliary/draw/draw_pt_emit.c
index d35329aba0f..92ad8f70497 100644
--- a/src/gallium/auxiliary/draw/draw_pt_emit.c
+++ b/src/gallium/auxiliary/draw/draw_pt_emit.c
@@ -65,16 +65,14 @@ static struct translate *cached_translate(struct pt_emit *emit,
struct translate_key *key)
{
unsigned hash_key = create_key(key);
- struct cso_hash_iter iter = cso_hash_find(emit->hash, hash_key);
- struct translate *translate = 0;
-
- if (cso_hash_iter_is_null(iter)) {
+ struct translate *translate = (struct translate*)
+ cso_hash_find_data_from_template(emit->hash,
+ hash_key,
+ key, sizeof(*key));
+ if (!translate) {
+ /* create/insert */
translate = translate_create(key);
cso_hash_insert(emit->hash, hash_key, translate);
- /*debug_printf("\tCREATED with %d\n", hash_key);*/
- } else {
- translate = cso_hash_iter_data(iter);
- /*debug_printf("\tOK with %d\n", hash_key);*/
}
return translate;
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch.c b/src/gallium/auxiliary/draw/draw_pt_fetch.c
index a8d4be5b64b..013d16e1bcc 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch.c
@@ -67,19 +67,10 @@ static struct translate *cached_translate(struct pt_fetch *fetch,
struct translate_key *key)
{
unsigned hash_key = create_key(key);
- struct cso_hash_iter iter = cso_hash_find(fetch->hash, hash_key);
- struct translate *translate = 0;
-
- while (!cso_hash_iter_is_null(iter)) {
- void *iter_data = cso_hash_iter_data(iter);
- if (memcmp(iter_data, key, sizeof(*key)) == 0) {
- /* found */
- translate = cso_hash_iter_data(iter);
- break;
- }
- iter = cso_hash_iter_next(iter);
- /*debug_printf("\tOK with %d\n", hash_key);*/
- }
+ struct translate *translate = (struct translate*)
+ cso_hash_find_data_from_template(fetch->hash,
+ hash_key,
+ key, sizeof(*key));
if (!translate) {
/* create/insert */