radv: Always lower indirect derefs after nir_lower_global_vars_to_local.

Otherwise new local variables can cause hangs on vega.

CC: <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105098
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Bas Nieuwenhuizen
2018-02-15 21:24:35 +01:00
parent 2ab1ce30c4
commit 05d84ed68a
3 changed files with 53 additions and 36 deletions

View File

@@ -1525,9 +1525,16 @@ radv_link_shaders(struct radv_pipeline *pipeline, nir_shader **shaders)
ordered_shaders[i - 1]);
if (progress) {
nir_lower_global_vars_to_local(ordered_shaders[i]);
if (nir_lower_global_vars_to_local(ordered_shaders[i])) {
radv_lower_indirect_derefs(ordered_shaders[i],
pipeline->device->physical_device);
}
radv_optimize_nir(ordered_shaders[i]);
nir_lower_global_vars_to_local(ordered_shaders[i - 1]);
if (nir_lower_global_vars_to_local(ordered_shaders[i - 1])) {
radv_lower_indirect_derefs(ordered_shaders[i - 1],
pipeline->device->physical_device);
}
radv_optimize_nir(ordered_shaders[i - 1]);
}
}