From e8c5f8b9d3288d9a9e679a1c453fd015d1a359cf Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 1 Sep 2020 12:54:25 -0700 Subject: nir/lower_clip: Add i/o semantics for load/store intrinsics. ir3 looks at the .location on its inputs for handling non-VARYING_SLOT_POS, but our uninitialized semantics matched that and threw a compiler assertion failure. Fixes: 502abfce7f5d ("nir: save IO semantics in lowered IO intrinsics") Reviewed-by: Connor Abbott Part-of: --- .gitlab-ci/traces-freedreno.yml | 9 ++++----- src/compiler/nir/nir_lower_clip.c | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci/traces-freedreno.yml b/.gitlab-ci/traces-freedreno.yml index 886307863dc..2bc3281b5bf 100644 --- a/.gitlab-ci/traces-freedreno.yml +++ b/.gitlab-ci/traces-freedreno.yml @@ -233,11 +233,10 @@ traces: # expectations: # - device: freedreno-a630 # checksum: 0 -# Fails due to clipdistance lowering not setting i/o semantics. -# - path: neverball/neverball.trace -# expectations: -# - device: freedreno-a630 -# checksum: 0 + - path: neverball/neverball.trace + expectations: + - device: freedreno-a630 + checksum: e67cdf15590f1729201eb82393f5513e - path: pathfinder/canvas_moire.trace expectations: - device: freedreno-a630 diff --git a/src/compiler/nir/nir_lower_clip.c b/src/compiler/nir/nir_lower_clip.c index 6e8010cf78b..bbd4ce0ff3e 100644 --- a/src/compiler/nir/nir_lower_clip.c +++ b/src/compiler/nir/nir_lower_clip.c @@ -100,6 +100,13 @@ store_clipdist_output(nir_builder *b, nir_variable *out, nir_ssa_def **val) store->num_components = 4; nir_intrinsic_set_base(store, out->data.driver_location); nir_intrinsic_set_write_mask(store, 0xf); + + nir_io_semantics semantics = { + .location = out->data.location, + .num_slots = 1, + }; + nir_intrinsic_set_io_semantics(store, semantics); + store->src[0].ssa = nir_vec4(b, val[0], val[1], val[2], val[3]); store->src[0].is_ssa = true; store->src[1] = nir_src_for_ssa(nir_imm_int(b, 0)); @@ -115,6 +122,13 @@ load_clipdist_input(nir_builder *b, nir_variable *in, int location_offset, load = nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_input); load->num_components = 4; nir_intrinsic_set_base(load, in->data.driver_location + location_offset); + + nir_io_semantics semantics = { + .location = in->data.location, + .num_slots = 1, + }; + nir_intrinsic_set_io_semantics(load, semantics); + load->src[0] = nir_src_for_ssa(nir_imm_int(b, 0)); nir_ssa_dest_init(&load->instr, &load->dest, 4, 32, NULL); nir_builder_instr_insert(b, &load->instr); -- cgit v1.2.3