ac/nir: extract shader_info->fs.can_discard from NIR shader info
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Sat, 24 Jun 2017 16:38:38 +0000 (18:38 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 31 Jul 2017 12:55:40 +0000 (14:55 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/common/ac_nir_to_llvm.c

index 3125ade3b3f3b410e5ef6011b80c0ee828dea5db..ecddb5e9b9b10923e4223db8c0df6b5f72f74605 100644 (file)
@@ -3627,7 +3627,6 @@ static void emit_discard_if(struct nir_to_llvm_context *ctx,
                            const nir_intrinsic_instr *instr)
 {
        LLVMValueRef cond;
-       ctx->shader_info->fs.can_discard = true;
 
        cond = LLVMBuildICmp(ctx->builder, LLVMIntNE,
                             get_src(ctx->nir, instr->src[0]),
@@ -4086,7 +4085,6 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
                result = visit_image_size(ctx, instr);
                break;
        case nir_intrinsic_discard:
-               ctx->nctx->shader_info->fs.can_discard = true;
                ac_build_intrinsic(&ctx->ac, "llvm.AMDGPU.kilp",
                                   LLVMVoidTypeInContext(ctx->ac.context),
                                   NULL, 0, AC_FUNC_ATTR_LEGACY);
@@ -6234,6 +6232,8 @@ LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
                        ctx.shader_info->vs.vgpr_comp_cnt =
                                MAX2(3, ctx.shader_info->vs.vgpr_comp_cnt);
                }
+       } else if (nir->stage == MESA_SHADER_FRAGMENT) {
+               shader_info->fs.can_discard = nir->info.fs.uses_discard;
        }
 
        ac_setup_rings(&ctx);