瀏覽代碼

ilo: simplify shader variant handling

Remove hash function on shader variants. Nature of variants limits them to a
small number and thus its more efficient to just do a memory compare of the
actual shader structures rather than compute and compare hashes.
tags/mesa-9.2-rc1
Courtney Goeltzenleuchter 12 年之前
父節點
當前提交
8b1c9de166
共有 2 個檔案被更改,包括 2 行新增25 行删除
  1. 2
    23
      src/gallium/drivers/ilo/ilo_shader.c
  2. 0
    2
      src/gallium/drivers/ilo/ilo_shader.h

+ 2
- 23
src/gallium/drivers/ilo/ilo_shader.c 查看文件

@@ -160,23 +160,6 @@ ilo_shader_variant_guess(struct ilo_shader_variant *variant,
}
}

/**
* Hash a shader variant.
*/
static unsigned int
ilo_shader_variant_hash(const struct ilo_shader_variant *variant)
{
const int num_bytes = sizeof(*variant);
const unsigned char *bytes = (const unsigned char *) variant;
const unsigned int seed = 131;
unsigned int hash = 0;
int i;

for (i = 0; i < num_bytes; i++)
hash = hash * seed + bytes[i];

return hash;
}

/**
* Parse a TGSI instruction for the shader info.
@@ -428,14 +411,12 @@ ilo_shader_state_gc(struct ilo_shader_state *state)
*/
static struct ilo_shader *
ilo_shader_state_search_variant(struct ilo_shader_state *state,
unsigned int hash,
const struct ilo_shader_variant *variant)
{
struct ilo_shader *sh = NULL, *tmp;

LIST_FOR_EACH_ENTRY(tmp, &state->variants, list) {
if (tmp->hash == hash &&
memcmp(&tmp->variant, variant, sizeof(*variant)) == 0) {
if (memcmp(&tmp->variant, variant, sizeof(*variant)) == 0) {
sh = tmp;
break;
}
@@ -451,10 +432,9 @@ struct ilo_shader *
ilo_shader_state_add_variant(struct ilo_shader_state *state,
const struct ilo_shader_variant *variant)
{
const unsigned int hash = ilo_shader_variant_hash(variant);
struct ilo_shader *sh;

sh = ilo_shader_state_search_variant(state, hash, variant);
sh = ilo_shader_state_search_variant(state, variant);
if (sh)
return sh;

@@ -483,7 +463,6 @@ ilo_shader_state_add_variant(struct ilo_shader_state *state,
}

sh->variant = *variant;
sh->hash = hash;

ilo_shader_state_add_shader(state, sh);


+ 0
- 2
src/gallium/drivers/ilo/ilo_shader.h 查看文件

@@ -74,8 +74,6 @@ struct ilo_shader_variant {
*/
struct ilo_shader {
struct ilo_shader_variant variant;
/* hash of the shader variant for quicker lookup */
unsigned hash;

struct {
int semantic_names[PIPE_MAX_SHADER_INPUTS];

Loading…
取消
儲存