Mesa (main): zink: run optimize_nir() only once during compile
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Oct 27 17:23:38 UTC 2021
Module: Mesa
Branch: main
Commit: 14f7eb9d4c0b2727c7e14027d82f86cf41cecc62
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=14f7eb9d4c0b2727c7e14027d82f86cf41cecc62
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Tue Oct 19 14:39:32 2021 -0400
zink: run optimize_nir() only once during compile
running all the optimizer passes repeatedly is stupid
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13484>
---
src/gallium/drivers/zink/zink_compiler.c | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c
index 1715ce2c2d1..5bdfdc9cdae 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -787,6 +787,8 @@ zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shad
VkShaderModule mod = VK_NULL_HANDLE;
void *streamout = NULL;
nir_shader *nir = nir_shader_clone(NULL, base_nir);
+ bool need_optimize = false;
+ bool inlined_uniforms = false;
if (key) {
if (key->inline_uniforms) {
@@ -795,11 +797,7 @@ zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shad
key->base.inlined_uniform_values,
nir->info.inlinable_uniform_dw_offsets);
- optimize_nir(nir);
-
- /* This must be done again. */
- NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_in |
- nir_var_shader_out);
+ inlined_uniforms = true;
}
/* TODO: use a separate mem ctx here for ralloc */
@@ -852,7 +850,7 @@ zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shad
}
nir_fixup_deref_modes(nir);
NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_shader_temp, NULL);
- optimize_nir(nir);
+ need_optimize = true;
}
if (zink_fs_key(key)->force_dual_color_blend && nir->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DATA1)) {
NIR_PASS_V(nir, lower_dual_blend);
@@ -868,12 +866,21 @@ zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shad
fbfetch->data.mode = nir_var_shader_temp;
nir_fixup_deref_modes(nir);
NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_shader_temp, NULL);
- optimize_nir(nir);
+ need_optimize = true;
}
break;
default: break;
}
}
+ if (inlined_uniforms) {
+ optimize_nir(nir);
+
+ /* This must be done again. */
+ NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_in |
+ nir_var_shader_out);
+ } else if (need_optimize)
+ optimize_nir(nir);
+
NIR_PASS_V(nir, nir_convert_from_ssa, true);
struct spirv_shader *spirv = nir_to_spirv(nir, streamout, screen->spirv_version);
More information about the mesa-commit
mailing list