glsl: implement opt_dead_builtin_varyings() as a NIR pass

And also call it via the NIR varying linker.

Acked-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15731>
This commit is contained in:
Timothy Arceri
2022-04-01 15:24:48 +11:00
committed by Marge Bot
parent e5122a5543
commit 4600108ddf
4 changed files with 573 additions and 1 deletions

View File

@@ -3051,7 +3051,12 @@ link_varyings(struct gl_shader_program *prog, unsigned first,
return false;
}
if (num_shaders != 1) {
if (num_shaders == 1) {
gl_nir_opt_dead_builtin_varyings(consts, api, prog, NULL, linked_shader[0],
0, NULL);
gl_nir_opt_dead_builtin_varyings(consts, api, prog, linked_shader[0], NULL,
num_xfb_decls, xfb_decls);
} else {
/* Linking the stages in the opposite order (from fragment to vertex)
* ensures that inter-shader outputs written to in an earlier stage
* are eliminated if they are (transitively) not used in a later
@@ -3065,6 +3070,10 @@ link_varyings(struct gl_shader_program *prog, unsigned first,
struct gl_linked_shader *const sh_i = prog->_LinkedShaders[i];
struct gl_linked_shader *const sh_next = prog->_LinkedShaders[next];
gl_nir_opt_dead_builtin_varyings(consts, api, prog, sh_i, sh_next,
next == MESA_SHADER_FRAGMENT ? num_xfb_decls : 0,
xfb_decls);
const uint64_t reserved_out_slots =
reserved_varying_slot(sh_i, nir_var_shader_out);
const uint64_t reserved_in_slots =