From: Marek Olšák Date: Tue, 30 Jul 2019 02:04:16 +0000 (-0400) Subject: radeonsi/nir: handle key.mono.u.ps.interpolate_at_sample_force_center X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f818d9ae3c89f858e93ea0ea3293103b97599e8f;p=mesa.git radeonsi/nir: handle key.mono.u.ps.interpolate_at_sample_force_center Acked-by: Pierre-Eric Pelloux-Prayer --- diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 5e25e838f8f..879d32f50d6 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -3080,6 +3080,9 @@ static LLVMValueRef barycentric_at_sample(struct ac_nir_context *ctx, unsigned mode, LLVMValueRef sample_id) { + if (ctx->abi->interp_at_sample_force_center) + return barycentric_center(ctx, mode); + LLVMValueRef halfval = LLVMConstReal(ctx->ac.f32, 0.5f); /* fetch sample ID */ diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h index d6db398ee7b..3033ae0cac2 100644 --- a/src/amd/common/ac_shader_abi.h +++ b/src/amd/common/ac_shader_abi.h @@ -203,6 +203,7 @@ struct ac_shader_abi { /* Whether to clamp the shadow reference value to [0,1]on GFX8. Radeonsi currently * uses it due to promoting D16 to D32, but radv needs it off. */ bool clamp_shadow_reference; + bool interp_at_sample_force_center; /* Whether to workaround GFX9 ignoring the stride for the buffer size if IDXEN=0 * and LLVM optimizes an indexed load with constant index to IDXEN=0. */ diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 56d35e533e5..5ca4e178b86 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -1243,7 +1243,10 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir) ac_to_integer(&ctx->ac, ac_build_gather_values(&ctx->ac, values, 4)); } - } + + ctx->abi.interp_at_sample_force_center = + ctx->shader->key.mono.u.ps.interpolate_at_sample_force_center; + } ctx->abi.inputs = &ctx->inputs[0]; ctx->abi.load_sampler_desc = si_nir_load_sampler_desc;