radv: add sample mask input support
authorDave Airlie <airlied@redhat.com>
Mon, 30 Jan 2017 19:30:26 +0000 (05:30 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 24 Feb 2017 00:31:35 +0000 (10:31 +1000)
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/common/ac_nir_to_llvm.c

index ca1416dfbf82bf3c2c1c707b5517300e16e8bd8c..0cc581034043a2aa0fcfc321f6040dad4edb9aa5 100644 (file)
@@ -99,6 +99,7 @@ struct nir_to_llvm_context {
        LLVMValueRef linear_sample, linear_center, linear_centroid;
        LLVMValueRef front_face;
        LLVMValueRef ancillary;
+       LLVMValueRef sample_coverage;
        LLVMValueRef frag_pos[4];
 
        LLVMBasicBlockRef continue_block;
@@ -532,7 +533,7 @@ static void create_function(struct nir_to_llvm_context *ctx)
                arg_types[arg_idx++] = ctx->f32;  /* pos w float */
                arg_types[arg_idx++] = ctx->i32;  /* front face */
                arg_types[arg_idx++] = ctx->i32;  /* ancillary */
-               arg_types[arg_idx++] = ctx->f32;  /* sample coverage */
+               arg_types[arg_idx++] = ctx->i32;  /* sample coverage */
                arg_types[arg_idx++] = ctx->i32;  /* fixed pt */
                break;
        default:
@@ -659,6 +660,7 @@ static void create_function(struct nir_to_llvm_context *ctx)
                ctx->frag_pos[3] = LLVMGetParam(ctx->main_function, arg_idx++);
                ctx->front_face = LLVMGetParam(ctx->main_function, arg_idx++);
                ctx->ancillary = LLVMGetParam(ctx->main_function, arg_idx++);
+               ctx->sample_coverage = LLVMGetParam(ctx->main_function, arg_idx++);
                break;
        default:
                unreachable("Shader stage not implemented");
@@ -3115,6 +3117,9 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
                ctx->shader_info->fs.force_persample = true;
                result = load_sample_pos(ctx);
                break;
+       case nir_intrinsic_load_sample_mask_in:
+               result = ctx->sample_coverage;
+               break;
        case nir_intrinsic_load_front_face:
                result = ctx->front_face;
                break;