From: Matt Turner Date: Thu, 2 Mar 2017 19:18:04 +0000 (-0800) Subject: nir: Return progress from nir_lower_clamp_color_outputs(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0bd615d961d117f8ae0354df813cc98ea0df4755;p=mesa.git nir: Return progress from nir_lower_clamp_color_outputs(). Reviewed-by: Jason Ekstrand --- diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 8c74af0dff7..e03c0560c0e 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2503,7 +2503,7 @@ bool nir_lower_clip_cull_distance_arrays(nir_shader *nir); void nir_lower_two_sided_color(nir_shader *shader); -void nir_lower_clamp_color_outputs(nir_shader *shader); +bool nir_lower_clamp_color_outputs(nir_shader *shader); void nir_lower_passthrough_edgeflags(nir_shader *shader); void nir_lower_tes_patch_vertices(nir_shader *tes, unsigned patch_vertices); diff --git a/src/compiler/nir/nir_lower_clamp_color_outputs.c b/src/compiler/nir/nir_lower_clamp_color_outputs.c index ab211a4296c..cc497351eee 100644 --- a/src/compiler/nir/nir_lower_clamp_color_outputs.c +++ b/src/compiler/nir/nir_lower_clamp_color_outputs.c @@ -59,7 +59,7 @@ is_color_output(lower_state *state, nir_variable *out) } } -static void +static bool lower_intrinsic(lower_state *state, nir_intrinsic_instr *intr) { nir_variable *out = NULL; @@ -82,11 +82,11 @@ lower_intrinsic(lower_state *state, nir_intrinsic_instr *intr) assume(out); break; default: - return; + return false; } if (out->data.mode != nir_var_shader_out) - return; + return false; if (is_color_output(state, out)) { b->cursor = nir_before_instr(&intr->instr); @@ -94,38 +94,50 @@ lower_intrinsic(lower_state *state, nir_intrinsic_instr *intr) s = nir_fsat(b, s); nir_instr_rewrite_src(&intr->instr, &intr->src[0], nir_src_for_ssa(s)); } + + return true; } static bool lower_block(lower_state *state, nir_block *block) { + bool progress = false; + nir_foreach_instr_safe(instr, block) { if (instr->type == nir_instr_type_intrinsic) - lower_intrinsic(state, nir_instr_as_intrinsic(instr)); + progress |= lower_intrinsic(state, nir_instr_as_intrinsic(instr)); } - return true; + return progress; } -static void + +static bool lower_impl(lower_state *state, nir_function_impl *impl) { nir_builder_init(&state->b, impl); + bool progress = false; nir_foreach_block(block, impl) { - lower_block(state, block); + progress |= lower_block(state, block); } nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + + return progress; } -void nir_lower_clamp_color_outputs(nir_shader *shader) +bool +nir_lower_clamp_color_outputs(nir_shader *shader) { + bool progress = false; lower_state state = { .shader = shader, }; nir_foreach_function(function, shader) { if (function->impl) - lower_impl(&state, function->impl); + progress |= lower_impl(&state, function->impl); } + + return progress; }