ac/nir,radeonsi: add and use ac_shader_abi::{ancillary,sample_coverage}
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Sun, 25 Jun 2017 17:40:40 +0000 (19:40 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 31 Jul 2017 12:55:43 +0000 (14:55 +0200)
v2: update for LLVMValueRefs in ac_shader_abi

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/common/ac_nir_to_llvm.c
src/amd/common/ac_shader_abi.h
src/gallium/drivers/radeonsi/si_shader.c

index a60a900073c93607837d8dd312207cdad3c6aa51..622b97896df1c4ca0dae3b7d8673249a255512ee 100644 (file)
@@ -132,8 +132,6 @@ struct nir_to_llvm_context {
        LLVMValueRef sample_pos_offset;
        LLVMValueRef persp_sample, persp_center, persp_centroid;
        LLVMValueRef linear_sample, linear_center, linear_centroid;
-       LLVMValueRef ancillary;
-       LLVMValueRef sample_coverage;
        LLVMValueRef frag_pos[4];
 
        LLVMTypeRef i1;
@@ -816,8 +814,8 @@ static void create_function(struct nir_to_llvm_context *ctx)
                add_vgpr_argument(&args, ctx->f32, &ctx->frag_pos[2]);  /* pos z float */
                add_vgpr_argument(&args, ctx->f32, &ctx->frag_pos[3]);  /* pos w float */
                add_vgpr_argument(&args, ctx->i32, &ctx->abi.front_face);  /* front face */
-               add_vgpr_argument(&args, ctx->i32, &ctx->ancillary);  /* ancillary */
-               add_vgpr_argument(&args, ctx->i32, &ctx->sample_coverage);  /* sample coverage */
+               add_vgpr_argument(&args, ctx->i32, &ctx->abi.ancillary);  /* ancillary */
+               add_vgpr_argument(&args, ctx->i32, &ctx->abi.sample_coverage);  /* sample coverage */
                add_vgpr_argument(&args, ctx->i32, NULL);  /* fixed pt */
                break;
        default:
@@ -4003,13 +4001,13 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
                        fprintf(stderr, "Unknown primitive id intrinsic: %d", ctx->stage);
                break;
        case nir_intrinsic_load_sample_id:
-               result = unpack_param(ctx->nctx, ctx->nctx->ancillary, 8, 4);
+               result = unpack_param(ctx->nctx, ctx->abi->ancillary, 8, 4);
                break;
        case nir_intrinsic_load_sample_pos:
                result = load_sample_pos(ctx->nctx);
                break;
        case nir_intrinsic_load_sample_mask_in:
-               result = ctx->nctx->sample_coverage;
+               result = ctx->abi->sample_coverage;
                break;
        case nir_intrinsic_load_front_face:
                result = ctx->abi->front_face;
index 1c8d0e8b3abfc5dd59efa28b34503d4d328872d3..fd62f22e2bf599531494ddd06b756a4b5b69f24c 100644 (file)
@@ -45,6 +45,8 @@ struct ac_shader_abi {
        LLVMValueRef vertex_id;
        LLVMValueRef instance_id;
        LLVMValueRef front_face;
+       LLVMValueRef ancillary;
+       LLVMValueRef sample_coverage;
 
        /* For VS and PS: pre-loaded shader inputs.
         *
index 473dd95a149bf4c3e85ac3ab0926153ae805ee6f..e37052cbe708b746c3fd1ea72794ed6392c71c11 100644 (file)
@@ -4541,8 +4541,10 @@ static void create_function(struct si_shader_context *ctx)
                add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->i32,
                                       &ctx->abi.front_face, SI_PARAM_FRONT_FACE);
                shader->info.face_vgpr_index = 20;
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->i32, SI_PARAM_ANCILLARY);
-               add_arg_checked(&fninfo, ARG_VGPR, ctx->f32, SI_PARAM_SAMPLE_COVERAGE);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->i32,
+                                      &ctx->abi.ancillary, SI_PARAM_ANCILLARY);
+               add_arg_assign_checked(&fninfo, ARG_VGPR, ctx->f32,
+                                      &ctx->abi.sample_coverage, SI_PARAM_SAMPLE_COVERAGE);
                add_arg_checked(&fninfo, ARG_VGPR, ctx->i32, SI_PARAM_POS_FIXED_PT);
 
                /* Color inputs from the prolog. */