Ver código fonte

glsl: replace some more old hash_table uses

The util/hash_table was intended to be a fast hash table
replacement for the program/hash_table see 35fd61bd99 and 72e55bb688.

This change replaces some more uses of the old hash table.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
tags/11.0-branchpoint
Timothy Arceri 10 anos atrás
pai
commit
431a065861
2 arquivos alterados com 41 adições e 41 exclusões
  1. 40
    40
      src/glsl/glsl_types.cpp
  2. 1
    1
      src/glsl/glsl_types.h

+ 40
- 40
src/glsl/glsl_types.cpp Ver arquivo

@@ -25,7 +25,7 @@
#include "main/core.h" /* for Elements, MAX2 */
#include "glsl_parser_extras.h"
#include "glsl_types.h"
#include "program/hash_table.h"
#include "util/hash_table.h"


mtx_t glsl_type::mutex = _MTX_INITIALIZER_NP;
@@ -329,12 +329,12 @@ _mesa_glsl_release_types(void)
* necessary.
*/
if (glsl_type::array_types != NULL) {
hash_table_dtor(glsl_type::array_types);
_mesa_hash_table_destroy(glsl_type::array_types, NULL);
glsl_type::array_types = NULL;
}

if (glsl_type::record_types != NULL) {
hash_table_dtor(glsl_type::record_types);
_mesa_hash_table_destroy(glsl_type::record_types, NULL);
glsl_type::record_types = NULL;
}
}
@@ -648,27 +648,28 @@ glsl_type::get_array_instance(const glsl_type *base, unsigned array_size)
mtx_lock(&glsl_type::mutex);

if (array_types == NULL) {
array_types = hash_table_ctor(64, hash_table_string_hash,
hash_table_string_compare);
array_types = _mesa_hash_table_create(NULL, _mesa_key_hash_string,
_mesa_key_string_equal);
}

const glsl_type *t = (glsl_type *) hash_table_find(array_types, key);

if (t == NULL) {
const struct hash_entry *entry = _mesa_hash_table_search(array_types, key);
if (entry == NULL) {
mtx_unlock(&glsl_type::mutex);
t = new glsl_type(base, array_size);
const glsl_type *t = new glsl_type(base, array_size);
mtx_lock(&glsl_type::mutex);

hash_table_insert(array_types, (void *) t, ralloc_strdup(mem_ctx, key));
entry = _mesa_hash_table_insert(array_types,
ralloc_strdup(mem_ctx, key),
(void *) t);
}

assert(t->base_type == GLSL_TYPE_ARRAY);
assert(t->length == array_size);
assert(t->fields.array == base);
assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_ARRAY);
assert(((glsl_type *) entry->data)->length == array_size);
assert(((glsl_type *) entry->data)->fields.array == base);

mtx_unlock(&glsl_type::mutex);

return t;
return (glsl_type *) entry->data;
}


@@ -722,19 +723,13 @@ glsl_type::record_compare(const glsl_type *b) const
}


int
bool
glsl_type::record_key_compare(const void *a, const void *b)
{
const glsl_type *const key1 = (glsl_type *) a;
const glsl_type *const key2 = (glsl_type *) b;

/* Return zero is the types match (there is zero difference) or non-zero
* otherwise.
*/
if (strcmp(key1->name, key2->name) != 0)
return 1;

return !key1->record_compare(key2);
return strcmp(key1->name, key2->name) == 0 && key1->record_compare(key2);
}


@@ -772,25 +767,27 @@ glsl_type::get_record_instance(const glsl_struct_field *fields,
mtx_lock(&glsl_type::mutex);

if (record_types == NULL) {
record_types = hash_table_ctor(64, record_key_hash, record_key_compare);
record_types = _mesa_hash_table_create(NULL, record_key_hash,
record_key_compare);
}

const glsl_type *t = (glsl_type *) hash_table_find(record_types, & key);
if (t == NULL) {
const struct hash_entry *entry = _mesa_hash_table_search(record_types,
&key);
if (entry == NULL) {
mtx_unlock(&glsl_type::mutex);
t = new glsl_type(fields, num_fields, name);
const glsl_type *t = new glsl_type(fields, num_fields, name);
mtx_lock(&glsl_type::mutex);

hash_table_insert(record_types, (void *) t, t);
entry = _mesa_hash_table_insert(record_types, t, (void *) t);
}

assert(t->base_type == GLSL_TYPE_STRUCT);
assert(t->length == num_fields);
assert(strcmp(t->name, name) == 0);
assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_STRUCT);
assert(((glsl_type *) entry->data)->length == num_fields);
assert(strcmp(((glsl_type *) entry->data)->name, name) == 0);

mtx_unlock(&glsl_type::mutex);

return t;
return (glsl_type *) entry->data;
}


@@ -805,25 +802,28 @@ glsl_type::get_interface_instance(const glsl_struct_field *fields,
mtx_lock(&glsl_type::mutex);

if (interface_types == NULL) {
interface_types = hash_table_ctor(64, record_key_hash, record_key_compare);
interface_types = _mesa_hash_table_create(NULL, record_key_hash,
record_key_compare);
}

const glsl_type *t = (glsl_type *) hash_table_find(interface_types, & key);
if (t == NULL) {
const struct hash_entry *entry = _mesa_hash_table_search(interface_types,
&key);
if (entry == NULL) {
mtx_unlock(&glsl_type::mutex);
t = new glsl_type(fields, num_fields, packing, block_name);
const glsl_type *t = new glsl_type(fields, num_fields,
packing, block_name);
mtx_lock(&glsl_type::mutex);

hash_table_insert(interface_types, (void *) t, t);
entry = _mesa_hash_table_insert(interface_types, t, (void *) t);
}

assert(t->base_type == GLSL_TYPE_INTERFACE);
assert(t->length == num_fields);
assert(strcmp(t->name, block_name) == 0);
assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_INTERFACE);
assert(((glsl_type *) entry->data)->length == num_fields);
assert(strcmp(((glsl_type *) entry->data)->name, block_name) == 0);

mtx_unlock(&glsl_type::mutex);

return t;
return (glsl_type *) entry->data;
}



+ 1
- 1
src/glsl/glsl_types.h Ver arquivo

@@ -688,7 +688,7 @@ private:
/** Hash table containing the known interface types. */
static struct hash_table *interface_types;

static int record_key_compare(const void *a, const void *b);
static bool record_key_compare(const void *a, const void *b);
static unsigned record_key_hash(const void *key);

/**

Carregando…
Cancelar
Salvar