From 2c4616368b963c8aebfb549eec7a517fc5f8589e Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Mon, 22 Jun 2020 14:25:08 +0200 Subject: [PATCH] v3d: Implement the line coord intrinsic The line coord intrinsic is loaded from the implicit varying stored in the same slot as the point coord when drawing lines. Reviewed-by: Eric Anholt Part-of: --- src/broadcom/compiler/nir_to_vir.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 2b641240d53..3fba318373f 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -2165,6 +2165,10 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr) vir_uniform(c, QUNIFORM_ALPHA_REF, 0)); break; + case nir_intrinsic_load_line_coord: + ntq_store_dest(c, &instr->dest, 0, vir_MOV(c, c->line_x)); + break; + case nir_intrinsic_load_sample_mask_in: ntq_store_dest(c, &instr->dest, 0, vir_MSF(c)); break; @@ -2720,7 +2724,10 @@ nir_to_vir(struct v3d_compile *c) c->point_x = emit_fragment_varying(c, NULL, 0, 0); c->point_y = emit_fragment_varying(c, NULL, 0, 0); c->uses_implicit_point_line_varyings = true; - } else if (c->fs_key->is_lines && c->devinfo->ver < 40) { + } else if (c->fs_key->is_lines && + (c->devinfo->ver < 40 || + (c->s->info.system_values_read & + BITFIELD64_BIT(SYSTEM_VALUE_LINE_COORD)))) { c->line_x = emit_fragment_varying(c, NULL, 0, 0); c->uses_implicit_point_line_varyings = true; } -- 2.30.2