Mesa (main): ac/nir: add an option to disable anisotropic filtering for single level images

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Dec 16 07:42:25 UTC 2021


Module: Mesa
Branch: main
Commit: 8a327722d541d4b8eb3cdd485cf8b0770d1912b9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8a327722d541d4b8eb3cdd485cf8b0770d1912b9

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Mon Dec 13 17:39:01 2021 +0100

ac/nir: add an option to disable anisotropic filtering for single level images

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14171>

---

 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 0c585d7d9f8..697bab09d76 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 941cc3ce582..c1269f83a02 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 09c1710c27e..c6f43a6fce9 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 0577287f73c..8ece050561b 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++) {



More information about the mesa-commit mailing list