From dcf8c4425a2591504223a7d0a4b154b780af451e Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sun, 1 May 2016 08:06:34 -0400 Subject: nir: make lower_clamp_color pass work after lower i/o Kinda important to work with tgsi_to_nir, which generates nir which already has i/o lowered. Signed-off-by: Rob Clark --- src/compiler/nir/nir_lower_clamp_color_outputs.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'src/compiler/nir') diff --git a/src/compiler/nir/nir_lower_clamp_color_outputs.c b/src/compiler/nir/nir_lower_clamp_color_outputs.c index 37c4ff00a3d..68bfbed81aa 100644 --- a/src/compiler/nir/nir_lower_clamp_color_outputs.c +++ b/src/compiler/nir/nir_lower_clamp_color_outputs.c @@ -62,14 +62,28 @@ is_color_output(lower_state *state, nir_variable *out) static void lower_intrinsic(lower_state *state, nir_intrinsic_instr *intr) { - nir_variable *out; + nir_variable *out = NULL; nir_builder *b = &state->b; nir_ssa_def *s; - if (intr->intrinsic != nir_intrinsic_store_var) + switch (intr->intrinsic) { + case nir_intrinsic_store_var: + out = intr->variables[0]->var; + break; + case nir_intrinsic_store_output: + /* already had i/o lowered.. lookup the matching output var: */ + nir_foreach_variable(var, &state->shader->outputs) { + int drvloc = var->data.driver_location; + if (nir_intrinsic_base(intr) == drvloc) { + out = var; + break; + } + } + assert(out); + break; + default: return; - - out = intr->variables[0]->var; + } if (out->data.mode != nir_var_shader_out) return; -- cgit v1.2.3