From a9771d2b7580ae1273c4edeb9eebcafab39a72bb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Sat, 8 Aug 2009 22:56:22 +0100 Subject: [PATCH] llvmpipe: Fix one const generation for some signed integers. --- src/gallium/drivers/llvmpipe/lp_bld_const.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/llvmpipe/lp_bld_const.c b/src/gallium/drivers/llvmpipe/lp_bld_const.c index 2109a85ceb8..20f0d3c40bb 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_const.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_const.c @@ -125,14 +125,20 @@ lp_build_one(union lp_type type) elems[0] = LLVMConstInt(elem_type, 1LL << (type.width/2), 0); else if(!type.norm) elems[0] = LLVMConstInt(elem_type, 1, 0); + else if(type.sign) + elems[0] = LLVMConstInt(elem_type, (1LL << (type.width - 1)) - 1, 0); else { /* special case' -- 1.0 for normalized types is more easily attained if * we start with a vector consisting of all bits set */ LLVMTypeRef vec_type = LLVMVectorType(elem_type, type.length); LLVMValueRef vec = LLVMConstAllOnes(vec_type); +#if 0 if(type.sign) - vec = LLVMConstLShr(vec, LLVMConstInt(LLVMInt32Type(), 1, 0)); + /* TODO: Unfortunately this caused "Tried to create a shift operation + * on a non-integer type!" */ + vec = LLVMConstLShr(vec, lp_build_int_const_uni(type, 1)); +#endif return vec; } -- 2.30.2