diff options
author | Zack Rusin <[email protected]> | 2013-04-09 05:11:45 -0700 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2013-04-10 12:37:17 -0700 |
commit | fe29f99293cb3bbc834f4d4d65e87ac7c734615d (patch) | |
tree | 20801e2c03d5ffa33cdf4533566fba75fe2f25ab /src/gallium/auxiliary/gallivm | |
parent | d56f2d52675397610717875c4a2a5edb04e2c997 (diff) |
gallivm/tgsi: handle untyped moves
both mov and ucmp can be used to move variables of any type.
correctly note that about ucmp in the tgsi_info and make
sure gallivm can handle that by correctly casting the untyped
moves.
Signed-off-by: Zack Rusin <[email protected]>
Reviewed-by: Jose Fonseca <[email protected]>
Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/gallivm')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 6cc72ff948d..853de09cc6b 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -1084,6 +1084,15 @@ emit_store_chan( break; } + /* If the destination is untyped then the source can be anything, + * but LLVM won't like if the types don't match so lets cast + * to the correct destination type as expected by LLVM. */ + if (dtype == TGSI_TYPE_UNTYPED && + !lp_check_vec_type(bld_store->type, LLVMTypeOf(value))) { + value = LLVMBuildBitCast(builder, value, bld_store->vec_type, + "src_casted"); + } + switch( inst->Instruction.Saturate ) { case TGSI_SAT_NONE: break; |