From 9dcb94e0e1c081eba898f4142f766724270fcb05 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 30 Jun 2022 13:17:06 -0700 Subject: [PATCH] ir3: Make sure to pass the interp_mode through in our load_bary lowering. Fixes dEQP-VK.draw.renderpass.linear_interpolation.* in vkcts 1.3.3.0 Part-of: --- src/freedreno/ci/freedreno-a618-fails.txt | 8 -------- src/freedreno/ci/freedreno-a630-fails.txt | 8 -------- .../ir3/ir3_nir_lower_load_barycentric_at_offset.c | 5 ++++- .../ir3/ir3_nir_lower_load_barycentric_at_sample.c | 2 +- 4 files changed, 5 insertions(+), 18 deletions(-) diff --git a/src/freedreno/ci/freedreno-a618-fails.txt b/src/freedreno/ci/freedreno-a618-fails.txt index d7837fcf784..4d99b38ac49 100644 --- a/src/freedreno/ci/freedreno-a618-fails.txt +++ b/src/freedreno/ci/freedreno-a618-fails.txt @@ -27,12 +27,4 @@ dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_ dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash -dEQP-VK.draw.renderpass.linear_interpolation.offset_max_1_sample,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_max_2_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_max_4_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_min_1_sample,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_min_2_samples,Fail dEQP-VK.draw.renderpass.linear_interpolation.offset_min_4_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.no_offset_1_sample,Fail -dEQP-VK.draw.renderpass.linear_interpolation.no_offset_2_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.no_offset_4_samples,Fail diff --git a/src/freedreno/ci/freedreno-a630-fails.txt b/src/freedreno/ci/freedreno-a630-fails.txt index 156a4070435..58d582da393 100644 --- a/src/freedreno/ci/freedreno-a630-fails.txt +++ b/src/freedreno/ci/freedreno-a630-fails.txt @@ -458,12 +458,4 @@ dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_ dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash -dEQP-VK.draw.renderpass.linear_interpolation.offset_max_1_sample,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_max_2_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_max_4_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_min_1_sample,Fail -dEQP-VK.draw.renderpass.linear_interpolation.offset_min_2_samples,Fail dEQP-VK.draw.renderpass.linear_interpolation.offset_min_4_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.no_offset_1_sample,Fail -dEQP-VK.draw.renderpass.linear_interpolation.no_offset_2_samples,Fail -dEQP-VK.draw.renderpass.linear_interpolation.no_offset_4_samples,Fail diff --git a/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_offset.c b/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_offset.c index ffa84959151..d21c9e2d8de 100644 --- a/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_offset.c +++ b/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_offset.c @@ -44,11 +44,14 @@ ir3_nir_lower_load_barycentric_at_offset_instr(nir_builder *b, nir_instr *instr, void *data) { nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); + enum glsl_interp_mode interp_mode = nir_intrinsic_interp_mode(intr); #define chan(var, c) nir_channel(b, var, c) nir_ssa_def *off = intr->src[0].ssa; - nir_ssa_def *ij = load(b, 2, nir_intrinsic_load_barycentric_pixel); + /* note: at_offset is defined to be relative to the center of the pixel */ + nir_ssa_def *ij = nir_load_barycentric_pixel(b, 32, .interp_mode = interp_mode); + nir_ssa_def *s = load(b, 1, nir_intrinsic_load_size_ir3); s = nir_frcp(b, s); diff --git a/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_sample.c b/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_sample.c index 4b949c2bd88..2b62459c3c5 100644 --- a/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_sample.c +++ b/src/freedreno/ir3/ir3_nir_lower_load_barycentric_at_sample.c @@ -43,7 +43,7 @@ lower_load_barycentric_at_sample(nir_builder *b, nir_intrinsic_instr *intr) { nir_ssa_def *pos = load_sample_pos(b, intr->src[0].ssa); - return nir_load_barycentric_at_offset(b, 32, pos); + return nir_load_barycentric_at_offset(b, 32, pos, .interp_mode = nir_intrinsic_interp_mode(intr)); } static nir_ssa_def *