From 8a327722d541d4b8eb3cdd485cf8b0770d1912b9 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 13 Dec 2021 17:39:01 +0100 Subject: [PATCH] ac/nir: add an option to disable anisotropic filtering for single level images Signed-off-by: Samuel Pitoiset Reviewed-by: Rhys Perry Part-of: --- src/amd/llvm/ac_nir_to_llvm.c | 2 +- src/amd/llvm/ac_shader_abi.h | 5 +++++ src/amd/vulkan/radv_nir_to_llvm.c | 1 + src/gallium/drivers/radeonsi/si_shader_llvm.c | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 0c585d7..697bab0 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -4453,7 +4453,7 @@ static LLVMValueRef sici_fix_sampler_aniso(struct ac_nir_context *ctx, LLVMValue LLVMBuilderRef builder = ctx->ac.builder; LLVMValueRef img7, samp0; - if (ctx->ac.chip_class >= GFX8) + if (ctx->ac.chip_class >= GFX8 || !ctx->abi->disable_aniso_single_level) return samp; img7 = LLVMBuildExtractElement(builder, res, LLVMConstInt(ctx->ac.i32, 7, 0), ""); diff --git a/src/amd/llvm/ac_shader_abi.h b/src/amd/llvm/ac_shader_abi.h index 941cc3c..c1269f8 100644 --- a/src/amd/llvm/ac_shader_abi.h +++ b/src/amd/llvm/ac_shader_abi.h @@ -170,6 +170,11 @@ struct ac_shader_abi { * some GFX10.3 chips. */ bool adjust_frag_coord_z; + + /* Whether anisotropic filtering should be disabled for single level + * images. + */ + bool disable_aniso_single_level; }; #endif /* AC_SHADER_ABI_H */ diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c index 09c1710..c6f43a6 100644 --- a/src/amd/vulkan/radv_nir_to_llvm.c +++ b/src/amd/vulkan/radv_nir_to_llvm.c @@ -2399,6 +2399,7 @@ ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm, ctx.abi.clamp_shadow_reference = false; ctx.abi.adjust_frag_coord_z = options->adjust_frag_coord_z; ctx.abi.robust_buffer_access = options->robust_buffer_access; + ctx.abi.disable_aniso_single_level = true; bool is_ngg = is_pre_gs_stage(shaders[0]->info.stage) && info->is_ngg; if (shader_count >= 2 || is_ngg) diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index 0577287..8ece050 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -520,6 +520,7 @@ static bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader * ctx->abi.convert_undef_to_zero = true; ctx->abi.clamp_div_by_zero = ctx->screen->options.clamp_div_by_zero; ctx->abi.adjust_frag_coord_z = false; + ctx->abi.disable_aniso_single_level = true; const struct si_shader_info *info = &ctx->shader->selector->info; for (unsigned i = 0; i < info->num_outputs; i++) { -- 2.7.4