diff options
author | José Fonseca <jfonseca@vmware.com> | 2009-09-10 12:01:42 +0100 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2009-09-10 12:01:42 +0100 |
commit | c3c80c5c22f9ce7fabba90daa5d5142e5fb1c012 (patch) | |
tree | 83f896c8a951f3be3ed1e29202cf8d3a0bb7c30f /src/gallium/drivers/llvmpipe/lp_state_fs.c | |
parent | 8e6b925d2a963a2d5a403e106d7d25e3dcca0775 (diff) |
llvmpipe: Skip blending when mask is zero.
This increases quake3 timedemo fps another 10%.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_state_fs.c')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_fs.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 2e60da60cd..354d9916c7 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -319,6 +319,8 @@ generate_blend(const struct pipe_blend_state *blend, LLVMValueRef dst_ptr) { struct lp_build_context bld; + struct lp_build_flow_context *flow; + struct lp_build_mask_context mask_ctx; LLVMTypeRef vec_type; LLVMTypeRef int_vec_type; LLVMValueRef const_ptr; @@ -327,11 +329,14 @@ generate_blend(const struct pipe_blend_state *blend, LLVMValueRef res[4]; unsigned chan; + lp_build_context_init(&bld, builder, type); + + flow = lp_build_flow_create(builder); + lp_build_mask_begin(&mask_ctx, flow, type, mask); + vec_type = lp_build_vec_type(type); int_vec_type = lp_build_int_vec_type(type); - lp_build_context_init(&bld, builder, type); - const_ptr = lp_jit_context_blend_color(builder, context_ptr); const_ptr = LLVMBuildBitCast(builder, const_ptr, LLVMPointerType(vec_type, 0), ""); @@ -354,6 +359,9 @@ generate_blend(const struct pipe_blend_state *blend, res[chan] = lp_build_select(&bld, mask, res[chan], dst[chan]); LLVMBuildStore(builder, res[chan], LLVMBuildGEP(builder, dst_ptr, &index, 1, "")); } + + lp_build_mask_end(&mask_ctx); + lp_build_flow_destroy(flow); } |