Module: Mesa
Branch: master
Commit: a63719db6ab07417fe2eb90fb041bc4b807bab18
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a63719db6ab07417fe2eb90fb041bc4b807bab18

Author: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Date:   Wed Jul 31 09:54:48 2019 +0200

ac: import linear/perspective PS input parameters from radv/radeonsi

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/amd/common/ac_shader_abi.h               |  9 ++++++++
 src/amd/vulkan/radv_nir_to_llvm.c            | 31 +++++++++++++---------------
 src/gallium/drivers/radeonsi/si_shader.c     | 18 ++++++++++------
 src/gallium/drivers/radeonsi/si_shader_nir.c | 18 +++++++---------
 4 files changed, 42 insertions(+), 34 deletions(-)

diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h
index ef628c1ff10..935355fbffa 100644
--- a/src/amd/common/ac_shader_abi.h
+++ b/src/amd/common/ac_shader_abi.h
@@ -58,6 +58,8 @@ struct ac_shader_abi {
        LLVMValueRef tes_patch_id;
        LLVMValueRef gs_prim_id;
        LLVMValueRef gs_invocation_id;
+
+       /* PS */
        LLVMValueRef frag_pos[4];
        LLVMValueRef front_face;
        LLVMValueRef ancillary;
@@ -66,6 +68,13 @@ struct ac_shader_abi {
        LLVMValueRef color0;
        LLVMValueRef color1;
        LLVMValueRef user_data;
+       LLVMValueRef persp_sample;
+       LLVMValueRef persp_center;
+       LLVMValueRef persp_centroid;
+       LLVMValueRef linear_sample;
+       LLVMValueRef linear_center;
+       LLVMValueRef linear_centroid;
+
        /* CS */
        LLVMValueRef local_invocation_ids;
        LLVMValueRef num_work_groups;
diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index fbfe12da562..94d51b31b81 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -86,9 +86,6 @@ struct radv_shader_context {
        LLVMValueRef hs_ring_tess_offchip;
        LLVMValueRef hs_ring_tess_factor;
 
-       LLVMValueRef persp_sample, persp_center, persp_centroid;
-       LLVMValueRef linear_sample, linear_center, linear_centroid;
-
        /* Streamout */
        LLVMValueRef streamout_buffers;
        LLVMValueRef streamout_write_idx;
@@ -1232,13 +1229,13 @@ static void create_function(struct radv_shader_context 
*ctx,
                                           &desc_sets);
 
                add_arg(&args, ARG_SGPR, ctx->ac.i32, &ctx->abi.prim_mask);
-               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->persp_sample);
-               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->persp_center);
-               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->persp_centroid);
+               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->abi.persp_sample);
+               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->abi.persp_center);
+               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, 
&ctx->abi.persp_centroid);
                add_arg(&args, ARG_VGPR, ctx->ac.v3i32, NULL); /* persp pull 
model */
-               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->linear_sample);
-               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->linear_center);
-               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, &ctx->linear_centroid);
+               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, 
&ctx->abi.linear_sample);
+               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, 
&ctx->abi.linear_center);
+               add_arg(&args, ARG_VGPR, ctx->ac.v2i32, 
&ctx->abi.linear_centroid);
                add_arg(&args, ARG_VGPR, ctx->ac.f32, NULL);  /* line stipple 
tex */
                add_arg(&args, ARG_VGPR, ctx->ac.f32, &ctx->abi.frag_pos[0]);
                add_arg(&args, ARG_VGPR, ctx->ac.f32, &ctx->abi.frag_pos[1]);
@@ -1774,19 +1771,19 @@ static LLVMValueRef lookup_interp_param(struct 
ac_shader_abi *abi,
        case INTERP_MODE_SMOOTH:
        case INTERP_MODE_NONE:
                if (location == INTERP_CENTER)
-                       return ctx->persp_center;
+                       return ctx->abi.persp_center;
                else if (location == INTERP_CENTROID)
-                       return ctx->persp_centroid;
+                       return ctx->abi.persp_centroid;
                else if (location == INTERP_SAMPLE)
-                       return ctx->persp_sample;
+                       return ctx->abi.persp_sample;
                break;
        case INTERP_MODE_NOPERSPECTIVE:
                if (location == INTERP_CENTER)
-                       return ctx->linear_center;
+                       return ctx->abi.linear_center;
                else if (location == INTERP_CENTROID)
-                       return ctx->linear_centroid;
+                       return ctx->abi.linear_centroid;
                else if (location == INTERP_SAMPLE)
-                       return ctx->linear_sample;
+                       return ctx->abi.linear_sample;
                break;
        }
        return NULL;
@@ -2382,8 +2379,8 @@ prepare_interp_optimize(struct radv_shader_context *ctx,
 
        if (uses_center && uses_centroid) {
                LLVMValueRef sel = LLVMBuildICmp(ctx->ac.builder, LLVMIntSLT, 
ctx->abi.prim_mask, ctx->ac.i32_0, "");
-               ctx->persp_centroid = LLVMBuildSelect(ctx->ac.builder, sel, 
ctx->persp_center, ctx->persp_centroid, "");
-               ctx->linear_centroid = LLVMBuildSelect(ctx->ac.builder, sel, 
ctx->linear_center, ctx->linear_centroid, "");
+               ctx->abi.persp_centroid = LLVMBuildSelect(ctx->ac.builder, sel, 
ctx->abi.persp_center, ctx->abi.persp_centroid, "");
+               ctx->abi.linear_centroid = LLVMBuildSelect(ctx->ac.builder, 
sel, ctx->abi.linear_center, ctx->abi.linear_centroid, "");
        }
 }
 
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index c0c45b0bae6..171c1393aef 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -4904,13 +4904,19 @@ static void create_function(struct si_shader_context 
*ctx)
                add_arg_assign_checked(&fninfo, ARG_SGPR, ctx->i32,
                                       &ctx->abi.prim_mask, SI_PARAM_PRIM_MASK);
 
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->v2i32, 
SI_PARAM_PERSP_SAMPLE);
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->v2i32, 
SI_PARAM_PERSP_CENTER);
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->v2i32, 
SI_PARAM_PERSP_CENTROID);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->v2i32,
+                                      &ctx->abi.persp_sample, 
SI_PARAM_PERSP_SAMPLE);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->v2i32,
+                                      &ctx->abi.persp_center, 
SI_PARAM_PERSP_CENTER);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->v2i32,
+                                      &ctx->abi.persp_centroid, 
SI_PARAM_PERSP_CENTROID);
                add_arg_checked(&fninfo, ARG_VGPR, v3i32, 
SI_PARAM_PERSP_PULL_MODEL);
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->v2i32, 
SI_PARAM_LINEAR_SAMPLE);
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->v2i32, 
SI_PARAM_LINEAR_CENTER);
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->v2i32, 
SI_PARAM_LINEAR_CENTROID);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->v2i32,
+                                      &ctx->abi.linear_sample, 
SI_PARAM_LINEAR_SAMPLE);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->v2i32,
+                                      &ctx->abi.linear_center, 
SI_PARAM_LINEAR_CENTER);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->v2i32,
+                                      &ctx->abi.linear_centroid, 
SI_PARAM_LINEAR_CENTROID);
                add_arg_checked(&fninfo, ARG_VGPR, ctx->f32, 
SI_PARAM_LINE_STIPPLE_TEX);
                add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->f32,
                                       &ctx->abi.frag_pos[0], 
SI_PARAM_POS_X_FLOAT);
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 21de12a043f..eeb27b66873 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -1088,7 +1088,6 @@ si_nir_lookup_interp_param(struct ac_shader_abi *abi,
                           enum glsl_interp_mode interp, unsigned location)
 {
        struct si_shader_context *ctx = si_shader_context_from_abi(abi);
-       int interp_param_idx = -1;
 
        switch (interp) {
        case INTERP_MODE_FLAT:
@@ -1096,27 +1095,24 @@ si_nir_lookup_interp_param(struct ac_shader_abi *abi,
        case INTERP_MODE_SMOOTH:
        case INTERP_MODE_NONE:
                if (location == INTERP_CENTER)
-                       interp_param_idx = SI_PARAM_PERSP_CENTER;
+                       return ctx->abi.persp_center;
                else if (location == INTERP_CENTROID)
-                       interp_param_idx = SI_PARAM_PERSP_CENTROID;
+                       return ctx->abi.persp_centroid;
                else if (location == INTERP_SAMPLE)
-                       interp_param_idx = SI_PARAM_PERSP_SAMPLE;
+                       return ctx->abi.persp_sample;
                break;
        case INTERP_MODE_NOPERSPECTIVE:
                if (location == INTERP_CENTER)
-                       interp_param_idx = SI_PARAM_LINEAR_CENTER;
+                       return ctx->abi.linear_center;
                else if (location == INTERP_CENTROID)
-                       interp_param_idx = SI_PARAM_LINEAR_CENTROID;
+                       return ctx->abi.linear_centroid;
                else if (location == INTERP_SAMPLE)
-                       interp_param_idx = SI_PARAM_LINEAR_SAMPLE;
+                       return ctx->abi.linear_sample;
                break;
        default:
                assert(!"Unhandled interpolation mode.");
-               return NULL;
        }
-
-       return interp_param_idx != -1 ?
-               LLVMGetParam(ctx->main_fn, interp_param_idx) : NULL;
+       return NULL;
 }
 
 static LLVMValueRef

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to