summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2009-08-17 08:10:38 +0100
committerJosé Fonseca <[email protected]>2009-08-29 09:21:33 +0100
commitc5abcac7ef7ebd0167093285b5fc9cf3829c1feb (patch)
tree3bdcc1143123dbbe258b72053285f3efbd377d62 /src/gallium
parent09a7b011acb3957725bb7e1bc4125f0939a295e7 (diff)
llvmpipe: Implement LIT.
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c34
1 files changed, 11 insertions, 23 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c b/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
index 000b7d01985..b7b1df9aded 100644
--- a/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
+++ b/src/gallium/drivers/llvmpipe/lp_bld_tgsi_soa.c
@@ -470,15 +470,11 @@ emit_instruction(
if( IS_DST0_CHANNEL_ENABLED( *inst, CHAN_X ) ) {
STORE( bld, *inst, 0, CHAN_X, bld->base.one);
}
- if( IS_DST0_CHANNEL_ENABLED( *inst, CHAN_W ) ) {
- STORE( bld, *inst, 0, CHAN_W, bld->base.one);
- }
if( IS_DST0_CHANNEL_ENABLED( *inst, CHAN_Y ) ) {
- tmp0 = FETCH( bld, *inst, 0, CHAN_X );
- tmp0 = lp_build_max( &bld->base, tmp0, bld->base.one);
- STORE( bld, *inst, 0, CHAN_Y, tmp0);
+ src0 = FETCH( bld, *inst, 0, CHAN_X );
+ dst0 = lp_build_max( &bld->base, src0, bld->base.zero);
+ STORE( bld, *inst, 0, CHAN_Y, dst0);
}
-#if 0
if( IS_DST0_CHANNEL_ENABLED( *inst, CHAN_Z ) ) {
/* XMM[1] = SrcReg[0].yyyy */
tmp1 = FETCH( bld, *inst, 0, CHAN_Y );
@@ -488,22 +484,14 @@ emit_instruction(
tmp2 = FETCH( bld, *inst, 0, CHAN_W );
tmp1 = lp_build_pow( &bld->base, tmp1, tmp2);
tmp0 = FETCH( bld, *inst, 0, CHAN_X );
- tmp2 = bld->base.zero;
- sse_cmpps(
- bld,
- make_xmm( 2 ),
- make_xmm( 0 ),
- cc_LessThan );
- sse_andps(
- bld,
- make_xmm( 2 ),
- make_xmm( 1 ) );
- STORE( bld, *inst, 0, CHAN_Z, tmp2);
- }
- break;
-#else
- return 0;
-#endif
+ tmp2 = lp_build_cmp(&bld->base, PIPE_FUNC_GREATER, tmp0, bld->base.zero);
+ dst0 = lp_build_select(&bld->base, tmp2, tmp1, bld->base.zero);
+ STORE( bld, *inst, 0, CHAN_Z, dst0);
+ }
+ if( IS_DST0_CHANNEL_ENABLED( *inst, CHAN_W ) ) {
+ STORE( bld, *inst, 0, CHAN_W, bld->base.one);
+ }
+ break;
case TGSI_OPCODE_RCP:
/* TGSI_OPCODE_RECIP */