Преглед на файлове

xorg: insert shaders into the cache

tags/mesa_7_6_rc1
Zack Rusin преди 16 години
родител
ревизия
7bc4744026
променени са 1 файла, в които са добавени 49 реда и са изтрити 0 реда
  1. 49
    0
      src/gallium/state_trackers/xorg/xorg_exa_tgsi.c

+ 49
- 0
src/gallium/state_trackers/xorg/xorg_exa_tgsi.c Целия файл

@@ -56,6 +56,20 @@ src_in_mask(struct ureg_program *ureg,
ureg_scalar(mask, TGSI_SWIZZLE_W));
}

static void *
create_vs(struct pipe_context *ctx,
unsigned vs_traits)
{
return NULL;
}

static void *
create_fs(struct pipe_context *ctx,
unsigned vs_traits)
{
return NULL;
}

static struct xorg_shader
xorg_shader_construct(struct exa_context *exa,
int op,
@@ -154,11 +168,46 @@ void xorg_shaders_destroy(struct xorg_shaders *sc)
free(sc);
}

static INLINE void *
shader_from_cache(struct pipe_context *pipe,
unsigned type,
struct cso_hash *hash,
unsigned key)
{
void *shader = 0;

struct cso_hash_iter iter = cso_hash_find(hash, key);

if (cso_hash_iter_is_null(iter)) {
if (type == PIPE_SHADER_VERTEX)
shader = create_vs(pipe, key);
else
shader = create_fs(pipe, key);
cso_hash_insert(hash, key, shader);
} else
shader = (void *)cso_hash_iter_data(iter);

return shader;
}

struct xorg_shader xorg_shaders_get(struct xorg_shaders *sc,
unsigned vs_traits,
unsigned fs_traits)
{
struct xorg_shader shader = {0};
void *vs, *fs;

vs = shader_from_cache(sc->exa->ctx, PIPE_SHADER_VERTEX,
sc->vs_hash, vs_traits);
fs = shader_from_cache(sc->exa->ctx, PIPE_SHADER_FRAGMENT,
sc->fs_hash, fs_traits);

debug_assert(vs && fs);
if (!vs || !fs)
return shader;

shader.vs = vs;
shader.fs = fs;

return shader;
}

Loading…
Отказ
Запис