From 1773eb329c1045ac3bc0051629f6c0ff73d82f14 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 5 Mar 2024 09:08:59 -0400 Subject: [PATCH] nir: add offset to load_coefficients_agx for indirect varyings Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_nir_lower_cull_distance.c | 2 +- src/asahi/compiler/agx_nir_lower_interpolation.c | 3 ++- src/compiler/nir/nir_intrinsics.py | 2 +- src/compiler/nir/nir_lower_io.c | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/asahi/compiler/agx_nir_lower_cull_distance.c b/src/asahi/compiler/agx_nir_lower_cull_distance.c index 58c15730bb2..ae124e0482f 100644 --- a/src/asahi/compiler/agx_nir_lower_cull_distance.c +++ b/src/asahi/compiler/agx_nir_lower_cull_distance.c @@ -94,7 +94,7 @@ agx_nir_lower_cull_distance_fs(nir_shader *s, unsigned nr_distances) * partial derivatives and the value somewhere. */ nir_def *cf = nir_load_coefficients_agx( - b, .component = i & 3, + b, nir_imm_int(b, 0), .component = i & 3, .io_semantics.location = VARYING_SLOT_CULL_PRIMITIVE + (i / 4), .io_semantics.num_slots = nr_distances / 4, .interp_mode = INTERP_MODE_NOPERSPECTIVE); diff --git a/src/asahi/compiler/agx_nir_lower_interpolation.c b/src/asahi/compiler/agx_nir_lower_interpolation.c index 274d5efbee2..eb9dce0926e 100644 --- a/src/asahi/compiler/agx_nir_lower_interpolation.c +++ b/src/asahi/compiler/agx_nir_lower_interpolation.c @@ -123,7 +123,8 @@ interpolate_channel(nir_builder *b, nir_intrinsic_instr *load, unsigned channel) sem.num_slots = 1; nir_def *coefficients = nir_load_coefficients_agx( - b, .component = nir_intrinsic_component(load) + channel, + b, nir_imm_int(b, 0), + .component = nir_intrinsic_component(load) + channel, .interp_mode = interp_mode_for_load(load), .io_semantics = sem); if (load->intrinsic == nir_intrinsic_load_input) { diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index c877d857397..b8f2dab5adb 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1803,7 +1803,7 @@ intrinsic("load_from_texture_handle_agx", [2], 1, [], # Load the coefficient register corresponding to a given fragment shader input. # Coefficient registers are vec3s that are dotted with to interpolate # the input, where x and y are relative to the 32x32 supertile. -intrinsic("load_coefficients_agx", +intrinsic("load_coefficients_agx", [1], bit_sizes = [32], dest_comp = 3, indices=[COMPONENT, IO_SEMANTICS, INTERP_MODE], diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index 4898b70dcaf..d0e238b67b6 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -2737,6 +2737,7 @@ nir_get_io_offset_src_number(const nir_intrinsic_instr *instr) case nir_intrinsic_task_payload_atomic_swap: case nir_intrinsic_global_atomic: case nir_intrinsic_global_atomic_swap: + case nir_intrinsic_load_coefficients_agx: return 0; case nir_intrinsic_load_ubo: case nir_intrinsic_load_ssbo: