unsigned glsl_type::record_key_hash(const void *a) { const glsl_type *const key = (glsl_type *) a; char hash_key[128]; unsigned size = 0; size = snprintf(hash_key, sizeof(hash_key), "%08x", key->length); for (unsigned i = 0; i < key->length; i++) { if (size >= sizeof(hash_key)) break; size += snprintf(& hash_key[size], sizeof(hash_key) - size, "%p", (void *) key->fields.structure[i].type); } return hash_table_string_hash(& hash_key); }
/** * Hash function for the output variables - computes the hash of the name. * NOTE: We're using the name string to ensure that the hash doesn't depend * on any random factors, otherwise the output_read_remover could produce * the random order of the assignments. * * NOTE: If you want to reuse this function please take into account that * generally the names of the variables are non-unique. */ static unsigned hash_table_var_hash(const void *key) { const ir_variable * var = static_cast<const ir_variable *>(key); return hash_table_string_hash(var->name); }