unsigned byte_size = bit_size / 8;
nir_ssa_def *val;
- if (nir_src_is_const(load->src[1])) {
+ if (!nir_src_is_divergent(load->src[0]) && nir_src_is_const(load->src[1])) {
uint32_t offset = nir_src_as_uint(load->src[1]);
/* Things should be component-aligned. */
NIR_PASS(_, nir, nir_copy_prop);
NIR_PASS(_, nir, nir_opt_constant_folding);
+ /* Required for nir_divergence_analysis() which is needed for
+ * anv_nir_lower_ubo_loads.
+ */
+ NIR_PASS(_, nir, nir_convert_to_lcssa, true, true);
+ nir_divergence_analysis(nir);
+
NIR_PASS(_, nir, anv_nir_lower_ubo_loads);
+ NIR_PASS(_, nir, nir_opt_remove_phis);
+
enum nir_lower_non_uniform_access_type lower_non_uniform_access_types =
nir_lower_non_uniform_texture_access | nir_lower_non_uniform_image_access;