Mesa (main): radeonsi: Add nir_lower_poly_line_smooth pass for polygon and line smoothing

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat Jul 16 10:41:27 UTC 2022


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

Author: Arvind Yadav <arvind.yadav at amd.com>
Date:   Fri Apr 29 18:18:36 2022 +0530

radeonsi: Add nir_lower_poly_line_smooth pass for polygon and line smoothing

Added a new NIR pass for handling polygon and line smoothing and
Removed previous smoothing changes.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16245>

---

 src/gallium/drivers/radeonsi/si_shader.c         |  3 +++
 src/gallium/drivers/radeonsi/si_shader_llvm_ps.c | 25 ------------------------
 2 files changed, 3 insertions(+), 25 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index bfb7a91c44e..9874c964ac9 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1647,6 +1647,9 @@ struct nir_shader *si_get_nir_shader(struct si_shader *shader, bool *free_nir,
       progress = true;
    }
 
+   if (sel->stage == MESA_SHADER_FRAGMENT && key->ps.mono.poly_line_smoothing)
+      NIR_PASS(progress, nir, nir_lower_poly_line_smooth, SI_NUM_SMOOTH_AA_SAMPLES);
+
    if (progress)
       si_nir_opts(sel->screen, nir, true);
 
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
index 5a883d0197b..069a0f58a4e 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
@@ -217,19 +217,6 @@ static void si_alpha_test(struct si_shader_context *ctx, LLVMValueRef alpha)
    }
 }
 
-static LLVMValueRef si_get_coverage_from_sample_mask(struct si_shader_context *ctx)
-{
-   LLVMValueRef coverage;
-
-   /* alpha = alpha * popcount(coverage) / SI_NUM_SMOOTH_AA_SAMPLES */
-   coverage = LLVMGetParam(ctx->main_fn, SI_PARAM_SAMPLE_COVERAGE);
-   coverage = ac_build_bit_count(&ctx->ac, ac_to_integer(&ctx->ac, coverage));
-   coverage = LLVMBuildUIToFP(ctx->ac.builder, coverage, ctx->ac.f32, "");
-
-   return LLVMBuildFMul(ctx->ac.builder, coverage,
-                        LLVMConstReal(ctx->ac.f32, 1.0 / SI_NUM_SMOOTH_AA_SAMPLES), "");
-}
-
 struct si_ps_exports {
    unsigned num;
    struct ac_export_args args[10];
@@ -508,10 +495,6 @@ void si_llvm_ps_build_end(struct si_shader_context *ctx)
       }
    }
 
-   LLVMValueRef smoothing_coverage = NULL;
-   if (ctx->shader->key.ps.mono.poly_line_smoothing)
-      smoothing_coverage = si_get_coverage_from_sample_mask(ctx);
-
    /* Fill the return structure. */
    ret = ctx->return_value;
 
@@ -527,11 +510,6 @@ void si_llvm_ps_build_end(struct si_shader_context *ctx)
          continue;
 
       if (LLVMTypeOf(color[i][0]) == ctx->ac.f16) {
-         if (smoothing_coverage) {
-            color[i][3] = LLVMBuildFMul(builder, color[i][3],
-                  LLVMBuildFPTrunc(builder, smoothing_coverage, ctx->ac.f16, ""), "");
-         }
-
          for (j = 0; j < 2; j++) {
             LLVMValueRef tmp = ac_build_gather_values(&ctx->ac, &color[i][j * 2], 2);
             tmp = LLVMBuildBitCast(builder, tmp, ctx->ac.f32, "");
@@ -539,9 +517,6 @@ void si_llvm_ps_build_end(struct si_shader_context *ctx)
          }
          vgpr += 2;
       } else {
-         if (smoothing_coverage)
-            color[i][3] = LLVMBuildFMul(builder, color[i][3], smoothing_coverage, "");
-
          for (j = 0; j < 4; j++)
             ret = LLVMBuildInsertValue(builder, ret, color[i][j], vgpr++, "");
       }



More information about the mesa-commit mailing list