From 7199b0b6811b3340cb5c531c8625220e964fa16c Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 6 Feb 2012 18:48:17 +0000 Subject: [PATCH] gallivm: fetch immediates to correct type (v2) Fetch float/uint/int immediates. v2: bitcast to uint/int to floats as per Jose's suggestions. Signed-off-by: Dave Airlie --- .../auxiliary/gallivm/lp_bld_tgsi_soa.c | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 0ae77900ee4..9a12db7842d 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -1409,11 +1409,30 @@ void lp_emit_immediate_soa( const uint size = imm->Immediate.NrTokens - 1; assert(size <= 4); assert(bld->num_immediates < LP_MAX_TGSI_IMMEDIATES); + switch (imm->Immediate.DataType) { + case TGSI_IMM_FLOAT32: + for( i = 0; i < size; ++i ) + bld->immediates[bld->num_immediates][i] = + lp_build_const_vec(gallivm, bld_base->base.type, imm->u[i].Float); - for( i = 0; i < size; ++i ) - bld->immediates[bld->num_immediates][i] = - lp_build_const_vec(gallivm, bld_base->base.type, imm->u[i].Float); + break; + case TGSI_IMM_UINT32: + for( i = 0; i < size; ++i ) { + LLVMValueRef tmp = lp_build_const_vec(gallivm, bld_base->uint_bld.type, imm->u[i].Uint); + bld->immediates[bld->num_immediates][i] = + LLVMConstBitCast(tmp, bld_base->base.vec_type); + } + break; + case TGSI_IMM_INT32: + for( i = 0; i < size; ++i ) { + LLVMValueRef tmp = lp_build_const_vec(gallivm, bld_base->int_bld.type, imm->u[i].Int); + bld->immediates[bld->num_immediates][i] = + LLVMConstBitCast(tmp, bld_base->base.vec_type); + } + + break; + } for( i = size; i < 4; ++i ) bld->immediates[bld->num_immediates][i] = bld_base->base.undef;