From: Marek Olšák Date: Sun, 6 Sep 2020 04:25:05 +0000 (-0400) Subject: nir: fix lower_mediump_outputs to not require variables X-Git-Tag: upstream/21.0.0~5439 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=40f7afc1e97e11b65f9975f3c079f44e5357379f;p=platform%2Fupstream%2Fmesa.git nir: fix lower_mediump_outputs to not require variables If IO is lowered, NIR doesn't have to contain any IO variables (and in fact radeonsi removes them and other drivers should too). This makes the pass work without variables. Reviewed-by: Alyssa Rosenzweig Reviewed-by: Eric Anholt Part-of: --- diff --git a/src/compiler/nir/nir_lower_mediump_outputs.c b/src/compiler/nir/nir_lower_mediump_outputs.c index eabdcbd..09f1637 100644 --- a/src/compiler/nir/nir_lower_mediump_outputs.c +++ b/src/compiler/nir/nir_lower_mediump_outputs.c @@ -47,42 +47,32 @@ nir_lower_mediump_outputs(nir_shader *nir) if (intr->intrinsic != nir_intrinsic_store_output) continue; - nir_foreach_shader_out_variable(var, nir) { - if (var->data.driver_location != nir_intrinsic_base(intr)) - continue; /* not found yet */ + if (!nir_intrinsic_io_semantics(intr).medium_precision) + break; /* can't lower */ - if (var->data.precision != GLSL_PRECISION_MEDIUM && - var->data.precision != GLSL_PRECISION_LOW) - break; /* can't lower */ - - switch (glsl_get_base_type(var->type)) { - case GLSL_TYPE_FLOAT: - var->type = glsl_float16_type(var->type); - b.cursor = nir_before_instr(&intr->instr); - nir_instr_rewrite_src(&intr->instr, &intr->src[0], - nir_src_for_ssa(nir_f2f16(&b, intr->src[0].ssa))); - nir_intrinsic_set_type(intr, nir_type_float16); - break; - - case GLSL_TYPE_INT: - var->type = glsl_int16_type(var->type); - b.cursor = nir_before_instr(&intr->instr); - nir_instr_rewrite_src(&intr->instr, &intr->src[0], - nir_src_for_ssa(nir_i2i16(&b, intr->src[0].ssa))); - nir_intrinsic_set_type(intr, nir_type_int16); - break; + switch (nir_intrinsic_type(intr)) { + case nir_type_float32: + b.cursor = nir_before_instr(&intr->instr); + nir_instr_rewrite_src(&intr->instr, &intr->src[0], + nir_src_for_ssa(nir_f2f16(&b, intr->src[0].ssa))); + nir_intrinsic_set_type(intr, nir_type_float16); + break; - case GLSL_TYPE_UINT: - var->type = glsl_uint16_type(var->type); - b.cursor = nir_before_instr(&intr->instr); - nir_instr_rewrite_src(&intr->instr, &intr->src[0], - nir_src_for_ssa(nir_u2u16(&b, intr->src[0].ssa))); - nir_intrinsic_set_type(intr, nir_type_uint16); - break; + case nir_type_int32: + b.cursor = nir_before_instr(&intr->instr); + nir_instr_rewrite_src(&intr->instr, &intr->src[0], + nir_src_for_ssa(nir_i2i16(&b, intr->src[0].ssa))); + nir_intrinsic_set_type(intr, nir_type_int16); + break; - default:; - } + case nir_type_uint32: + b.cursor = nir_before_instr(&intr->instr); + nir_instr_rewrite_src(&intr->instr, &intr->src[0], + nir_src_for_ssa(nir_u2u16(&b, intr->src[0].ssa))); + nir_intrinsic_set_type(intr, nir_type_uint16); break; + + default:; } } }