From 14ae0bfa5400f2a325b93040a8e7734332c7469f Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Wed, 26 Apr 2017 22:29:01 +0200 Subject: [PATCH] radv: Add NIR loop unrolling. Not much effect on dota2/talos, but positive on deferred. Signed-off-by: Bas Nieuwenhuizen Reviewed-by: Timothy Arceri Reviewed-by: Dave Airlie --- src/amd/vulkan/radv_pipeline.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index ce18178..3a5ac42 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -62,6 +62,7 @@ static const struct nir_shader_compiler_options nir_options = { .lower_unpack_unorm_4x8 = true, .lower_extract_byte = true, .lower_extract_word = true, + .max_unroll_iterations = 32 }; VkResult radv_CreateShaderModule( @@ -153,6 +154,12 @@ radv_optimize_nir(struct nir_shader *shader) NIR_PASS(progress, shader, nir_copy_prop); NIR_PASS(progress, shader, nir_opt_remove_phis); NIR_PASS(progress, shader, nir_opt_dce); + if (nir_opt_trivial_continues(shader)) { + progress = true; + NIR_PASS(progress, shader, nir_copy_prop); + NIR_PASS(progress, shader, nir_opt_dce); + } + NIR_PASS(progress, shader, nir_opt_if); NIR_PASS(progress, shader, nir_opt_dead_cf); NIR_PASS(progress, shader, nir_opt_cse); NIR_PASS(progress, shader, nir_opt_peephole_select, 8); @@ -160,6 +167,9 @@ radv_optimize_nir(struct nir_shader *shader) NIR_PASS(progress, shader, nir_opt_constant_folding); NIR_PASS(progress, shader, nir_opt_undef); NIR_PASS(progress, shader, nir_opt_conditional_discard); + if (shader->options->max_unroll_iterations) { + NIR_PASS(progress, shader, nir_opt_loop_unroll, 0); + } } while (progress); } -- 2.7.4