diff options
-rw-r--r-- | src/compiler/nir/nir_lower_clamp_color_outputs.c | 22 |
1 files changed, 18 insertions, 4 deletions
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; |