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;