Module: Mesa Branch: master Commit: b47815c772e220ad2e0333b8954640c3874b8da2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b47815c772e220ad2e0333b8954640c3874b8da2
Author: Mike Blumenkrantz <[email protected]> Date: Tue Dec 29 11:32:18 2020 -0500 zink: add a pipe_screen::finalize_nir hook moves some of the always-run passes into the base nir Reviewed-by: Dave Airlie <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9888> --- src/gallium/drivers/zink/zink_compiler.c | 31 ++++++++++++++++++++----------- src/gallium/drivers/zink/zink_compiler.h | 3 +++ src/gallium/drivers/zink/zink_screen.c | 1 + 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 63b05138402..ed11e0031f3 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -794,12 +794,6 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, ret->shader_id = p_atomic_inc_return(&screen->shader_id); ret->programs = _mesa_pointer_set_create(NULL); - if (!screen->info.feats.features.shaderImageGatherExtended) { - nir_lower_tex_options tex_opts = {}; - tex_opts.lower_tg4_offsets = true; - NIR_PASS_V(nir, nir_lower_tex, &tex_opts); - } - if (nir->info.stage == MESA_SHADER_VERTEX) create_vs_pushconst(nir); else if (nir->info.stage == MESA_SHADER_TESS_CTRL || @@ -809,11 +803,8 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, } else if (nir->info.stage == MESA_SHADER_KERNEL) create_cs_pushconst(nir); - NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 16); if (nir->info.stage < MESA_SHADER_FRAGMENT) have_psiz = check_psiz(nir); - if (nir->info.stage == MESA_SHADER_GEOMETRY) - NIR_PASS_V(nir, nir_lower_gs_intrinsics, nir_lower_gs_intrinsics_per_stream); NIR_PASS_V(nir, lower_basevertex); NIR_PASS_V(nir, lower_work_dim); NIR_PASS_V(nir, nir_lower_regs_to_ssa); @@ -823,8 +814,6 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, NIR_PASS_V(nir, lower_discard_if); NIR_PASS_V(nir, nir_lower_fragcolor); NIR_PASS_V(nir, lower_64bit_vertex_attribs); - if (nir->info.num_ubos || nir->info.num_ssbos) - NIR_PASS_V(nir, nir_lower_dynamic_bo_access); NIR_PASS_V(nir, unbreak_bos); if (zink_debug & ZINK_DEBUG_NIR) { @@ -896,6 +885,26 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, return ret; } +void +zink_shader_finalize(struct pipe_screen *pscreen, void *nirptr, bool optimize) +{ + struct zink_screen *screen = zink_screen(pscreen); + nir_shader *nir = nirptr; + + if (!screen->info.feats.features.shaderImageGatherExtended) { + nir_lower_tex_options tex_opts = {}; + tex_opts.lower_tg4_offsets = true; + NIR_PASS_V(nir, nir_lower_tex, &tex_opts); + } + NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 16); + if (nir->info.stage == MESA_SHADER_GEOMETRY) + NIR_PASS_V(nir, nir_lower_gs_intrinsics, nir_lower_gs_intrinsics_per_stream); + optimize_nir(nir); + if (nir->info.num_ubos || nir->info.num_ssbos) + NIR_PASS_V(nir, nir_lower_dynamic_bo_access); + nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)); +} + void zink_shader_free(struct zink_context *ctx, struct zink_shader *shader) { diff --git a/src/gallium/drivers/zink/zink_compiler.h b/src/gallium/drivers/zink/zink_compiler.h index 75aa5f6cb49..c73646a9e0b 100644 --- a/src/gallium/drivers/zink/zink_compiler.h +++ b/src/gallium/drivers/zink/zink_compiler.h @@ -98,6 +98,9 @@ struct zink_shader * zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, const struct pipe_stream_output_info *so_info); +void +zink_shader_finalize(struct pipe_screen *pscreen, void *nirptr, bool optimize); + void zink_shader_free(struct zink_context *ctx, struct zink_shader *shader); diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 8fe325c57ab..70c14b0f3de 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -1463,6 +1463,7 @@ zink_internal_create_screen(const struct pipe_screen_config *config) screen->base.context_create = zink_context_create; screen->base.flush_frontbuffer = zink_flush_frontbuffer; screen->base.destroy = zink_destroy_screen; + screen->base.finalize_nir = zink_shader_finalize; if (!zink_screen_resource_init(&screen->base)) goto fail; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
