Mesa (master): radv: don't lower indirects until after opts have run

Timothy Arceri tarceri at kemper.freedesktop.org
Tue Mar 20 04:01:54 UTC 2018


Module: Mesa
Branch: master
Commit: 9a243eccae618e85aa7af762a4c40ecd8a2e4882
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a243eccae618e85aa7af762a4c40ecd8a2e4882

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Thu Mar  8 16:20:48 2018 +1100

radv: don't lower indirects until after opts have run

Noticed while passing by. Not sure if it impacts anything, but
likely to impact GFX9 more than anything else since we lower
inputs, outputs and locals there.

Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_shader.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index ac577c36e9..c6935805c7 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -275,7 +275,6 @@ radv_shader_compile_to_nir(struct radv_device *device,
 	nir_lower_var_copies(nir);
 	nir_lower_global_vars_to_local(nir);
 	nir_remove_dead_variables(nir, nir_var_local);
-	ac_lower_indirect_derefs(nir, device->physical_device->rad_info.chip_class);
 	nir_lower_subgroups(nir, &(struct nir_lower_subgroups_options) {
 			.subgroup_size = 64,
 			.ballot_bit_size = 64,
@@ -287,6 +286,14 @@ radv_shader_compile_to_nir(struct radv_device *device,
 
 	radv_optimize_nir(nir);
 
+	/* Indirect lowering must be called after the radv_optimize_nir() loop
+	 * has been called at least once. Otherwise indirect lowering can
+	 * bloat the instruction count of the loop and cause it to be
+	 * considered too large for unrolling.
+	 */
+	ac_lower_indirect_derefs(nir, device->physical_device->rad_info.chip_class);
+	radv_optimize_nir(nir);
+
 	return nir;
 }
 




More information about the mesa-commit mailing list