From 3c7fc95f4fe89ca0246e829bae622c0d16fdd47d Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Sun, 1 Nov 2020 16:49:18 +0100 Subject: [PATCH] etnaviv: expose shader discard usage in etna_shader_variant The information about a shader using discard/kill is interesting to other parts of the driver, as depth states need to programmed differently depending on this. As we don't want to deal with NIR/TGSI differences in other parts of the driver, track this usage in the common etna_shader_variant. Signed-off-by: Lucas Stach Reviewed-by: Christian Gmeiner Part-of: --- src/gallium/drivers/etnaviv/etnaviv_compiler.h | 3 +++ src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c | 1 + src/gallium/drivers/etnaviv/etnaviv_compiler_tgsi.c | 1 + 3 files changed, 5 insertions(+) diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler.h b/src/gallium/drivers/etnaviv/etnaviv_compiler.h index 769cb8204ed..2a2c77962c4 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler.h +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler.h @@ -127,6 +127,9 @@ struct etna_shader_variant { /* shader is larger than GPU instruction limit, thus needs icache */ bool needs_icache; + + /* shader uses pixel kill/discard */ + bool uses_discard; }; struct etna_varying { diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c index 90b2b9c4963..6760a169e9d 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c @@ -1058,6 +1058,7 @@ etna_compile_shader_nir(struct etna_shader_variant *v) const struct etna_specs *specs = c->specs; v->stage = s->info.stage; + v->uses_discard = s->info.fs.uses_discard; v->num_loops = 0; /* TODO */ v->vs_id_in_reg = -1; v->vs_pos_out_reg = -1; diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_tgsi.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_tgsi.c index d6d12aef1ec..ed84117a4a3 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_tgsi.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_tgsi.c @@ -2471,6 +2471,7 @@ etna_compile_shader(struct etna_shader_variant *v) /* fill in output structure */ v->stage = c->info.processor == PIPE_SHADER_FRAGMENT ? MESA_SHADER_FRAGMENT : MESA_SHADER_VERTEX; + v->uses_discard = c->info.uses_kill; v->code_size = c->inst_ptr * 4; v->code = mem_dup(c->code, c->inst_ptr * 16); v->num_loops = c->num_loops;