From 77af1ca690f4f49e305c095d97b9af798bfea307 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Sat, 8 Aug 2020 17:44:15 +0200 Subject: etnaviv: add disk cache Adds a shader disk-cache for shader variants. Note that builds with `-Dshader-cache=false` have no-op stubs with `disk_cache_create()` that returns NULL. This shader disk-cache gets used when using NIR only. Helps to save about 1-2 minutes for a deqp run on gc2000. Signed-off-by: Christian Gmeiner Part-of: --- src/gallium/drivers/etnaviv/etnaviv_shader.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/gallium/drivers/etnaviv/etnaviv_shader.c') diff --git a/src/gallium/drivers/etnaviv/etnaviv_shader.c b/src/gallium/drivers/etnaviv/etnaviv_shader.c index b44354483ae..47becee5eb5 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_shader.c +++ b/src/gallium/drivers/etnaviv/etnaviv_shader.c @@ -29,6 +29,7 @@ #include "etnaviv_compiler.h" #include "etnaviv_context.h" #include "etnaviv_debug.h" +#include "etnaviv_disk_cache.h" #include "etnaviv_screen.h" #include "etnaviv_util.h" @@ -353,6 +354,10 @@ create_variant(struct etna_shader *shader, struct etna_shader_key key) v->shader = shader; v->key = key; + v->id = ++shader->variant_count; + + if (etna_disk_cache_retrieve(shader->compiler, v)) + return v; ret = etna_compile_shader(v); if (!ret) { @@ -360,7 +365,7 @@ create_variant(struct etna_shader *shader, struct etna_shader_key key) goto fail; } - v->id = ++shader->variant_count; + etna_disk_cache_store(shader->compiler, v); return v; @@ -412,7 +417,7 @@ etna_create_shader_state(struct pipe_context *pctx, else shader->tokens = tgsi_dup_tokens(pss->tokens); - + etna_disk_cache_init_shader_key(compiler, shader); if (etna_mesa_debug & ETNA_DBG_SHADERDB) { /* if shader-db run, create a standard variant immediately -- cgit v1.2.3