freedreno/ir3: move nir finalization to after cache miss

In cases where every variant is a shader-cache-hit, we never need the
post-finalize round of nir opt/lowering passes.  So defer this until
the first shader-cache-miss to avoid doing pointless work.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5372>
This commit is contained in:
Rob Clark 2020-06-23 10:09:30 -07:00
parent f97acb4bb4
commit 189a0fecf5
2 changed files with 12 additions and 7 deletions

View file

@ -248,6 +248,17 @@ create_variant(struct ir3_shader *shader, const struct ir3_shader_key *key)
if (ir3_disk_cache_retrieve(shader->compiler, v))
return v;
if (!shader->nir_finalized) {
ir3_nir_post_finalize(shader->compiler, shader->nir);
if (ir3_shader_debug & IR3_DBG_DISASM) {
printf("dump nir%d: type=%d", shader->id, shader->type);
nir_print_shader(shader->nir, stdout);
}
shader->nir_finalized = true;
}
if (!compile_variant(v))
goto fail;
@ -454,13 +465,6 @@ ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir,
ir3_disk_cache_init_shader_key(compiler, shader);
ir3_nir_post_finalize(compiler, nir);
if (ir3_shader_debug & IR3_DBG_DISASM) {
printf("dump nir%d: type=%d", shader->id, shader->type);
nir_print_shader(shader->nir, stdout);
}
ir3_setup_used_key(shader);
return shader;

View file

@ -690,6 +690,7 @@ struct ir3_shader {
unsigned num_reserved_user_consts;
bool nir_finalized;
struct nir_shader *nir;
struct ir3_stream_output_info stream_output;