summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/gallivm/lp_bld_conv.c
diff options
context:
space:
mode:
authorKeith Whitwell <[email protected]>2010-10-06 19:09:03 +0100
committerKeith Whitwell <[email protected]>2010-10-09 11:44:45 +0100
commit2ef6f75ab410bb188e028024e18891d7877febad (patch)
treed495ba93a3c74361f3e77fb820f108237f2c7915 /src/gallium/auxiliary/gallivm/lp_bld_conv.c
parentc79f162367b99d9438bd1589ecfdeba69baa9d3d (diff)
gallivm: simpler uint8->float conversions
LLVM seems to finds it easier to reason about these than our mantissa-manipulation code.
Diffstat (limited to 'src/gallium/auxiliary/gallivm/lp_bld_conv.c')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_conv.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_conv.c b/src/gallium/auxiliary/gallivm/lp_bld_conv.c
index 3abb19272b6..20aa2577830 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_conv.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_conv.c
@@ -178,6 +178,16 @@ lp_build_unsigned_norm_to_float(LLVMBuilderRef builder,
assert(dst_type.floating);
+ /* Special-case int8->float, though most cases could be handled
+ * this way:
+ */
+ if (src_width == 8) {
+ scale = 1.0/255.0;
+ res = LLVMBuildSIToFP(builder, src, vec_type, "");
+ res = LLVMBuildFMul(builder, res, lp_build_const_vec(dst_type, scale), "");
+ return res;
+ }
+
mantissa = lp_mantissa(dst_type);
n = MIN2(mantissa, src_width);