From c3c80c5c22f9ce7fabba90daa5d5142e5fb1c012 Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Thu, 10 Sep 2009 12:01:42 +0100 Subject: llvmpipe: Skip blending when mask is zero. This increases quake3 timedemo fps another 10%. --- src/gallium/drivers/llvmpipe/lp_bld_flow.c | 31 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'src/gallium/drivers/llvmpipe/lp_bld_flow.c') diff --git a/src/gallium/drivers/llvmpipe/lp_bld_flow.c b/src/gallium/drivers/llvmpipe/lp_bld_flow.c index 1252593226..69ed014ff3 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_flow.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_flow.c @@ -386,6 +386,22 @@ lp_build_flow_skip_end(struct lp_build_flow_context *flow) } +static void +lp_build_mask_check(struct lp_build_mask_context *mask) +{ + LLVMBuilderRef builder = mask->flow->builder; + LLVMValueRef cond; + + cond = LLVMBuildICmp(builder, + LLVMIntEQ, + LLVMBuildBitCast(builder, mask->value, mask->reg_type, ""), + LLVMConstNull(mask->reg_type), + ""); + + lp_build_flow_skip_cond_break(mask->flow, cond); +} + + void lp_build_mask_begin(struct lp_build_mask_context *mask, struct lp_build_flow_context *flow, @@ -401,6 +417,8 @@ lp_build_mask_begin(struct lp_build_mask_context *mask, lp_build_flow_scope_begin(flow); lp_build_flow_scope_declare(flow, &mask->value); lp_build_flow_skip_begin(flow); + + lp_build_mask_check(mask); } @@ -408,18 +426,9 @@ void lp_build_mask_update(struct lp_build_mask_context *mask, LLVMValueRef value) { - LLVMBuilderRef builder = mask->flow->builder; - LLVMValueRef cond; - - mask->value = LLVMBuildAnd(builder, mask->value, value, ""); - - cond = LLVMBuildICmp(builder, - LLVMIntEQ, - LLVMBuildBitCast(builder, mask->value, mask->reg_type, ""), - LLVMConstNull(mask->reg_type), - ""); + mask->value = LLVMBuildAnd( mask->flow->builder, mask->value, value, ""); - lp_build_flow_skip_cond_break(mask->flow, cond); + lp_build_mask_check(mask); } -- cgit v1.2.3