vc4: Fix leak of the compiled shader programs in the cache.

This commit is contained in:
Eric Anholt 2014-12-14 20:29:10 -08:00
parent 4da9e3d805
commit 80ed075e60
3 changed files with 24 additions and 0 deletions

View File

@ -431,6 +431,8 @@ vc4_context_destroy(struct pipe_context *pctx)
util_slab_destroy(&vc4->transfer_pool);
vc4_program_fini(pctx);
ralloc_free(vc4);
}

View File

@ -293,6 +293,7 @@ struct pipe_context *vc4_context_create(struct pipe_screen *pscreen,
void vc4_draw_init(struct pipe_context *pctx);
void vc4_state_init(struct pipe_context *pctx);
void vc4_program_init(struct pipe_context *pctx);
void vc4_program_fini(struct pipe_context *pctx);
void vc4_query_init(struct pipe_context *pctx);
void vc4_simulator_init(struct vc4_screen *screen);
int vc4_simulator_flush(struct vc4_context *vc4,

View File

@ -2777,3 +2777,24 @@ vc4_program_init(struct pipe_context *pctx)
vc4->vs_cache = _mesa_hash_table_create(pctx, vs_cache_hash,
vs_cache_compare);
}
void
vc4_program_fini(struct pipe_context *pctx)
{
struct vc4_context *vc4 = vc4_context(pctx);
struct hash_entry *entry;
hash_table_foreach(vc4->fs_cache, entry) {
struct vc4_compiled_shader *shader = entry->data;
vc4_bo_unreference(&shader->bo);
ralloc_free(shader);
_mesa_hash_table_remove(vc4->fs_cache, entry);
}
hash_table_foreach(vc4->vs_cache, entry) {
struct vc4_compiled_shader *shader = entry->data;
vc4_bo_unreference(&shader->bo);
ralloc_free(shader);
_mesa_hash_table_remove(vc4->vs_cache, entry);
}
}