summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2009-08-21 13:49:10 +0100
committerJosé Fonseca <jfonseca@vmware.com>2009-08-29 09:21:39 +0100
commit3d7a88674f9eb3320eeff511968f041426e25023 (patch)
tree277d61dfc0ec2ab6595709b38ff46e09ea16c60a /src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
parent90b5df8d1bbba9b11372d57e524586f28119c06f (diff)
llvmpipe: Early depth testing.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c b/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
index e392a50005..d35c8c6b7b 100644
--- a/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
+++ b/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
@@ -41,6 +41,7 @@
#include "lp_bld_arit.h"
#include "lp_bld_logic.h"
#include "lp_bld_swizzle.h"
+#include "lp_bld_flow.h"
#include "lp_bld_tgsi.h"
#include "lp_bld_debug.h"
@@ -88,7 +89,7 @@ struct lp_build_tgsi_soa_context
LLVMValueRef immediates[LP_MAX_IMMEDIATES][NUM_CHANNELS];
LLVMValueRef temps[LP_MAX_TEMPS][NUM_CHANNELS];
- LLVMValueRef *mask;
+ struct lp_build_mask_context *mask;
/** Coords/texels store */
LLVMValueRef store_ptr;
@@ -367,6 +368,7 @@ emit_kil(
{
const struct tgsi_full_src_register *reg = &inst->FullSrcRegisters[0];
LLVMValueRef terms[NUM_CHANNELS];
+ LLVMValueRef mask;
unsigned chan_index;
memset(&terms, 0, sizeof terms);
@@ -389,15 +391,22 @@ emit_kil(
terms[swizzle] = emit_fetch(bld, inst, 0, chan_index );
}
+ mask = NULL;
FOR_EACH_CHANNEL( chan_index ) {
if(terms[chan_index]) {
- LLVMValueRef mask;
+ LLVMValueRef chan_mask;
- mask = lp_build_cmp(&bld->base, PIPE_FUNC_GEQUAL, terms[chan_index], bld->base.zero);
+ chan_mask = lp_build_cmp(&bld->base, PIPE_FUNC_GEQUAL, terms[chan_index], bld->base.zero);
- lp_build_mask_and(bld->base.builder, bld->mask, mask);
+ if(mask)
+ mask = LLVMBuildAnd(bld->base.builder, mask, chan_mask, "");
+ else
+ mask = chan_mask;
}
}
+
+ if(mask)
+ lp_build_mask_update(bld->mask, mask);
}
@@ -1411,7 +1420,7 @@ void
lp_build_tgsi_soa(LLVMBuilderRef builder,
const struct tgsi_token *tokens,
union lp_type type,
- LLVMValueRef *mask,
+ struct lp_build_mask_context *mask,
LLVMValueRef *pos,
LLVMValueRef a0_ptr,
LLVMValueRef dadx_ptr,