gallivm/llvmpipe: rename some constant building functions
This commit is contained in:
parent
c86a499769
commit
185be3a87a
|
@ -361,12 +361,12 @@ lp_build_mul_u8n(LLVMBuilderRef builder,
|
||||||
LLVMValueRef c8;
|
LLVMValueRef c8;
|
||||||
LLVMValueRef ab;
|
LLVMValueRef ab;
|
||||||
|
|
||||||
c8 = lp_build_int_const_scalar(i16_type, 8);
|
c8 = lp_build_const_int_vec(i16_type, 8);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
/* a*b/255 ~= (a*(b + 1)) >> 256 */
|
/* a*b/255 ~= (a*(b + 1)) >> 256 */
|
||||||
b = LLVMBuildAdd(builder, b, lp_build_int_const_scalar(i16_type, 1), "");
|
b = LLVMBuildAdd(builder, b, lp_build_const_int_vec(i16_type, 1), "");
|
||||||
ab = LLVMBuildMul(builder, a, b, "");
|
ab = LLVMBuildMul(builder, a, b, "");
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -374,7 +374,7 @@ lp_build_mul_u8n(LLVMBuilderRef builder,
|
||||||
/* ab/255 ~= (ab + (ab >> 8) + 0x80) >> 8 */
|
/* ab/255 ~= (ab + (ab >> 8) + 0x80) >> 8 */
|
||||||
ab = LLVMBuildMul(builder, a, b, "");
|
ab = LLVMBuildMul(builder, a, b, "");
|
||||||
ab = LLVMBuildAdd(builder, ab, LLVMBuildLShr(builder, ab, c8, ""), "");
|
ab = LLVMBuildAdd(builder, ab, LLVMBuildLShr(builder, ab, c8, ""), "");
|
||||||
ab = LLVMBuildAdd(builder, ab, lp_build_int_const_scalar(i16_type, 0x80), "");
|
ab = LLVMBuildAdd(builder, ab, lp_build_const_int_vec(i16_type, 0x80), "");
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -429,7 +429,7 @@ lp_build_mul(struct lp_build_context *bld,
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type.fixed)
|
if(type.fixed)
|
||||||
shift = lp_build_int_const_scalar(type, type.width/2);
|
shift = lp_build_const_int_vec(type, type.width/2);
|
||||||
else
|
else
|
||||||
shift = NULL;
|
shift = NULL;
|
||||||
|
|
||||||
|
@ -491,7 +491,7 @@ lp_build_mul_imm(struct lp_build_context *bld,
|
||||||
* for Inf and NaN.
|
* for Inf and NaN.
|
||||||
*/
|
*/
|
||||||
unsigned mantissa = lp_mantissa(bld->type);
|
unsigned mantissa = lp_mantissa(bld->type);
|
||||||
factor = lp_build_int_const_scalar(bld->type, (unsigned long long)shift << mantissa);
|
factor = lp_build_const_int_vec(bld->type, (unsigned long long)shift << mantissa);
|
||||||
a = LLVMBuildBitCast(bld->builder, a, lp_build_int_vec_type(bld->type), "");
|
a = LLVMBuildBitCast(bld->builder, a, lp_build_int_vec_type(bld->type), "");
|
||||||
a = LLVMBuildAdd(bld->builder, a, factor, "");
|
a = LLVMBuildAdd(bld->builder, a, factor, "");
|
||||||
a = LLVMBuildBitCast(bld->builder, a, lp_build_vec_type(bld->type), "");
|
a = LLVMBuildBitCast(bld->builder, a, lp_build_vec_type(bld->type), "");
|
||||||
|
@ -499,12 +499,12 @@ lp_build_mul_imm(struct lp_build_context *bld,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
factor = lp_build_const_scalar(bld->type, shift);
|
factor = lp_build_const_vec(bld->type, shift);
|
||||||
return LLVMBuildShl(bld->builder, a, factor, "");
|
return LLVMBuildShl(bld->builder, a, factor, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
factor = lp_build_const_scalar(bld->type, (double)b);
|
factor = lp_build_const_vec(bld->type, (double)b);
|
||||||
return lp_build_mul(bld, a, factor);
|
return lp_build_mul(bld, a, factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -567,7 +567,7 @@ lp_build_lerp(struct lp_build_context *bld,
|
||||||
* but it will be wrong for other uses. Basically we need a more
|
* but it will be wrong for other uses. Basically we need a more
|
||||||
* powerful lp_type, capable of further distinguishing the values
|
* powerful lp_type, capable of further distinguishing the values
|
||||||
* interpretation from the value storage. */
|
* interpretation from the value storage. */
|
||||||
res = LLVMBuildAnd(bld->builder, res, lp_build_int_const_scalar(bld->type, (1 << bld->type.width/2) - 1), "");
|
res = LLVMBuildAnd(bld->builder, res, lp_build_const_int_vec(bld->type, (1 << bld->type.width/2) - 1), "");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -689,7 +689,7 @@ lp_build_abs(struct lp_build_context *bld,
|
||||||
/* vector of floats */
|
/* vector of floats */
|
||||||
LLVMTypeRef int_vec_type = lp_build_int_vec_type(type);
|
LLVMTypeRef int_vec_type = lp_build_int_vec_type(type);
|
||||||
unsigned long long absMask = ~(1ULL << (type.width - 1));
|
unsigned long long absMask = ~(1ULL << (type.width - 1));
|
||||||
LLVMValueRef mask = lp_build_int_const_scalar(type, ((unsigned long long) absMask));
|
LLVMValueRef mask = lp_build_const_int_vec(type, ((unsigned long long) absMask));
|
||||||
a = LLVMBuildBitCast(bld->builder, a, int_vec_type, "");
|
a = LLVMBuildBitCast(bld->builder, a, int_vec_type, "");
|
||||||
a = LLVMBuildAnd(bld->builder, a, mask, "");
|
a = LLVMBuildAnd(bld->builder, a, mask, "");
|
||||||
a = LLVMBuildBitCast(bld->builder, a, vec_type, "");
|
a = LLVMBuildBitCast(bld->builder, a, vec_type, "");
|
||||||
|
@ -751,7 +751,7 @@ lp_build_sgn(struct lp_build_context *bld,
|
||||||
/* vector */
|
/* vector */
|
||||||
int_type = lp_build_int_vec_type(type);
|
int_type = lp_build_int_vec_type(type);
|
||||||
vec_type = lp_build_vec_type(type);
|
vec_type = lp_build_vec_type(type);
|
||||||
mask = lp_build_int_const_scalar(type, maskBit);
|
mask = lp_build_const_int_vec(type, maskBit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Take the sign bit and add it to 1 constant */
|
/* Take the sign bit and add it to 1 constant */
|
||||||
|
@ -763,7 +763,7 @@ lp_build_sgn(struct lp_build_context *bld,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LLVMValueRef minus_one = lp_build_const_scalar(type, -1.0);
|
LLVMValueRef minus_one = lp_build_const_vec(type, -1.0);
|
||||||
cond = lp_build_cmp(bld, PIPE_FUNC_GREATER, a, bld->zero);
|
cond = lp_build_cmp(bld, PIPE_FUNC_GREATER, a, bld->zero);
|
||||||
res = lp_build_select(bld, cond, bld->one, minus_one);
|
res = lp_build_select(bld, cond, bld->one, minus_one);
|
||||||
}
|
}
|
||||||
|
@ -789,8 +789,8 @@ lp_build_set_sign(struct lp_build_context *bld,
|
||||||
const struct lp_type type = bld->type;
|
const struct lp_type type = bld->type;
|
||||||
LLVMTypeRef int_vec_type = lp_build_int_vec_type(type);
|
LLVMTypeRef int_vec_type = lp_build_int_vec_type(type);
|
||||||
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
||||||
LLVMValueRef shift = lp_build_int_const_scalar(type, type.width - 1);
|
LLVMValueRef shift = lp_build_const_int_vec(type, type.width - 1);
|
||||||
LLVMValueRef mask = lp_build_int_const_scalar(type,
|
LLVMValueRef mask = lp_build_const_int_vec(type,
|
||||||
~((unsigned long long) 1 << (type.width - 1)));
|
~((unsigned long long) 1 << (type.width - 1)));
|
||||||
LLVMValueRef val, res;
|
LLVMValueRef val, res;
|
||||||
|
|
||||||
|
@ -1034,7 +1034,7 @@ lp_build_iround(struct lp_build_context *bld,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
||||||
LLVMValueRef mask = lp_build_int_const_scalar(type, (unsigned long long)1 << (type.width - 1));
|
LLVMValueRef mask = lp_build_const_int_vec(type, (unsigned long long)1 << (type.width - 1));
|
||||||
LLVMValueRef sign;
|
LLVMValueRef sign;
|
||||||
LLVMValueRef half;
|
LLVMValueRef half;
|
||||||
|
|
||||||
|
@ -1043,7 +1043,7 @@ lp_build_iround(struct lp_build_context *bld,
|
||||||
sign = LLVMBuildAnd(bld->builder, sign, mask, "");
|
sign = LLVMBuildAnd(bld->builder, sign, mask, "");
|
||||||
|
|
||||||
/* sign * 0.5 */
|
/* sign * 0.5 */
|
||||||
half = lp_build_const_scalar(type, 0.5);
|
half = lp_build_const_vec(type, 0.5);
|
||||||
half = LLVMBuildBitCast(bld->builder, half, int_vec_type, "");
|
half = LLVMBuildBitCast(bld->builder, half, int_vec_type, "");
|
||||||
half = LLVMBuildOr(bld->builder, sign, half, "");
|
half = LLVMBuildOr(bld->builder, sign, half, "");
|
||||||
half = LLVMBuildBitCast(bld->builder, half, vec_type, "");
|
half = LLVMBuildBitCast(bld->builder, half, vec_type, "");
|
||||||
|
@ -1086,18 +1086,18 @@ lp_build_ifloor(struct lp_build_context *bld,
|
||||||
/* Take the sign bit and add it to 1 constant */
|
/* Take the sign bit and add it to 1 constant */
|
||||||
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
||||||
unsigned mantissa = lp_mantissa(type);
|
unsigned mantissa = lp_mantissa(type);
|
||||||
LLVMValueRef mask = lp_build_int_const_scalar(type, (unsigned long long)1 << (type.width - 1));
|
LLVMValueRef mask = lp_build_const_int_vec(type, (unsigned long long)1 << (type.width - 1));
|
||||||
LLVMValueRef sign;
|
LLVMValueRef sign;
|
||||||
LLVMValueRef offset;
|
LLVMValueRef offset;
|
||||||
|
|
||||||
/* sign = a < 0 ? ~0 : 0 */
|
/* sign = a < 0 ? ~0 : 0 */
|
||||||
sign = LLVMBuildBitCast(bld->builder, a, int_vec_type, "");
|
sign = LLVMBuildBitCast(bld->builder, a, int_vec_type, "");
|
||||||
sign = LLVMBuildAnd(bld->builder, sign, mask, "");
|
sign = LLVMBuildAnd(bld->builder, sign, mask, "");
|
||||||
sign = LLVMBuildAShr(bld->builder, sign, lp_build_int_const_scalar(type, type.width - 1), "");
|
sign = LLVMBuildAShr(bld->builder, sign, lp_build_const_int_vec(type, type.width - 1), "");
|
||||||
lp_build_name(sign, "floor.sign");
|
lp_build_name(sign, "floor.sign");
|
||||||
|
|
||||||
/* offset = -0.99999(9)f */
|
/* offset = -0.99999(9)f */
|
||||||
offset = lp_build_const_scalar(type, -(double)(((unsigned long long)1 << mantissa) - 1)/((unsigned long long)1 << mantissa));
|
offset = lp_build_const_vec(type, -(double)(((unsigned long long)1 << mantissa) - 1)/((unsigned long long)1 << mantissa));
|
||||||
offset = LLVMConstBitCast(offset, int_vec_type);
|
offset = LLVMConstBitCast(offset, int_vec_type);
|
||||||
|
|
||||||
/* offset = a < 0 ? -0.99999(9)f : 0.0f */
|
/* offset = a < 0 ? -0.99999(9)f : 0.0f */
|
||||||
|
@ -1268,7 +1268,7 @@ lp_build_exp(struct lp_build_context *bld,
|
||||||
LLVMValueRef x)
|
LLVMValueRef x)
|
||||||
{
|
{
|
||||||
/* log2(e) = 1/log(2) */
|
/* log2(e) = 1/log(2) */
|
||||||
LLVMValueRef log2e = lp_build_const_scalar(bld->type, 1.4426950408889634);
|
LLVMValueRef log2e = lp_build_const_vec(bld->type, 1.4426950408889634);
|
||||||
|
|
||||||
return lp_build_mul(bld, log2e, lp_build_exp2(bld, x));
|
return lp_build_mul(bld, log2e, lp_build_exp2(bld, x));
|
||||||
}
|
}
|
||||||
|
@ -1282,7 +1282,7 @@ lp_build_log(struct lp_build_context *bld,
|
||||||
LLVMValueRef x)
|
LLVMValueRef x)
|
||||||
{
|
{
|
||||||
/* log(2) */
|
/* log(2) */
|
||||||
LLVMValueRef log2 = lp_build_const_scalar(bld->type, 0.69314718055994529);
|
LLVMValueRef log2 = lp_build_const_vec(bld->type, 0.69314718055994529);
|
||||||
|
|
||||||
return lp_build_mul(bld, log2, lp_build_exp2(bld, x));
|
return lp_build_mul(bld, log2, lp_build_exp2(bld, x));
|
||||||
}
|
}
|
||||||
|
@ -1318,7 +1318,7 @@ lp_build_polynomial(struct lp_build_context *bld,
|
||||||
if (type.length == 1)
|
if (type.length == 1)
|
||||||
coeff = LLVMConstReal(float_type, coeffs[i]);
|
coeff = LLVMConstReal(float_type, coeffs[i]);
|
||||||
else
|
else
|
||||||
coeff = lp_build_const_scalar(type, coeffs[i]);
|
coeff = lp_build_const_vec(type, coeffs[i]);
|
||||||
|
|
||||||
if(res)
|
if(res)
|
||||||
res = lp_build_add(bld, coeff, lp_build_mul(bld, x, res));
|
res = lp_build_add(bld, coeff, lp_build_mul(bld, x, res));
|
||||||
|
@ -1375,11 +1375,11 @@ lp_build_exp2_approx(struct lp_build_context *bld,
|
||||||
|
|
||||||
assert(type.floating && type.width == 32);
|
assert(type.floating && type.width == 32);
|
||||||
|
|
||||||
x = lp_build_min(bld, x, lp_build_const_scalar(type, 129.0));
|
x = lp_build_min(bld, x, lp_build_const_vec(type, 129.0));
|
||||||
x = lp_build_max(bld, x, lp_build_const_scalar(type, -126.99999));
|
x = lp_build_max(bld, x, lp_build_const_vec(type, -126.99999));
|
||||||
|
|
||||||
/* ipart = int(x - 0.5) */
|
/* ipart = int(x - 0.5) */
|
||||||
ipart = LLVMBuildSub(bld->builder, x, lp_build_const_scalar(type, 0.5f), "");
|
ipart = LLVMBuildSub(bld->builder, x, lp_build_const_vec(type, 0.5f), "");
|
||||||
ipart = LLVMBuildFPToSI(bld->builder, ipart, int_vec_type, "");
|
ipart = LLVMBuildFPToSI(bld->builder, ipart, int_vec_type, "");
|
||||||
|
|
||||||
/* fpart = x - ipart */
|
/* fpart = x - ipart */
|
||||||
|
@ -1389,8 +1389,8 @@ lp_build_exp2_approx(struct lp_build_context *bld,
|
||||||
|
|
||||||
if(p_exp2_int_part || p_exp2) {
|
if(p_exp2_int_part || p_exp2) {
|
||||||
/* expipart = (float) (1 << ipart) */
|
/* expipart = (float) (1 << ipart) */
|
||||||
expipart = LLVMBuildAdd(bld->builder, ipart, lp_build_int_const_scalar(type, 127), "");
|
expipart = LLVMBuildAdd(bld->builder, ipart, lp_build_const_int_vec(type, 127), "");
|
||||||
expipart = LLVMBuildShl(bld->builder, expipart, lp_build_int_const_scalar(type, 23), "");
|
expipart = LLVMBuildShl(bld->builder, expipart, lp_build_const_int_vec(type, 23), "");
|
||||||
expipart = LLVMBuildBitCast(bld->builder, expipart, vec_type, "");
|
expipart = LLVMBuildBitCast(bld->builder, expipart, vec_type, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1456,8 +1456,8 @@ lp_build_log2_approx(struct lp_build_context *bld,
|
||||||
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
LLVMTypeRef vec_type = lp_build_vec_type(type);
|
||||||
LLVMTypeRef int_vec_type = lp_build_int_vec_type(type);
|
LLVMTypeRef int_vec_type = lp_build_int_vec_type(type);
|
||||||
|
|
||||||
LLVMValueRef expmask = lp_build_int_const_scalar(type, 0x7f800000);
|
LLVMValueRef expmask = lp_build_const_int_vec(type, 0x7f800000);
|
||||||
LLVMValueRef mantmask = lp_build_int_const_scalar(type, 0x007fffff);
|
LLVMValueRef mantmask = lp_build_const_int_vec(type, 0x007fffff);
|
||||||
LLVMValueRef one = LLVMConstBitCast(bld->one, int_vec_type);
|
LLVMValueRef one = LLVMConstBitCast(bld->one, int_vec_type);
|
||||||
|
|
||||||
LLVMValueRef i = NULL;
|
LLVMValueRef i = NULL;
|
||||||
|
@ -1482,8 +1482,8 @@ lp_build_log2_approx(struct lp_build_context *bld,
|
||||||
}
|
}
|
||||||
|
|
||||||
if(p_floor_log2 || p_log2) {
|
if(p_floor_log2 || p_log2) {
|
||||||
logexp = LLVMBuildLShr(bld->builder, exp, lp_build_int_const_scalar(type, 23), "");
|
logexp = LLVMBuildLShr(bld->builder, exp, lp_build_const_int_vec(type, 23), "");
|
||||||
logexp = LLVMBuildSub(bld->builder, logexp, lp_build_int_const_scalar(type, 127), "");
|
logexp = LLVMBuildSub(bld->builder, logexp, lp_build_const_int_vec(type, 127), "");
|
||||||
logexp = LLVMBuildSIToFP(bld->builder, logexp, vec_type, "");
|
logexp = LLVMBuildSIToFP(bld->builder, logexp, vec_type, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -263,7 +263,7 @@ lp_build_one(struct lp_type type)
|
||||||
if(type.sign)
|
if(type.sign)
|
||||||
/* TODO: Unfortunately this caused "Tried to create a shift operation
|
/* TODO: Unfortunately this caused "Tried to create a shift operation
|
||||||
* on a non-integer type!" */
|
* on a non-integer type!" */
|
||||||
vec = LLVMConstLShr(vec, lp_build_int_const_scalar(type, 1));
|
vec = LLVMConstLShr(vec, lp_build_const_int_vec(type, 1));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return vec;
|
return vec;
|
||||||
|
@ -283,8 +283,8 @@ lp_build_one(struct lp_type type)
|
||||||
* Build constant-valued vector from a scalar value.
|
* Build constant-valued vector from a scalar value.
|
||||||
*/
|
*/
|
||||||
LLVMValueRef
|
LLVMValueRef
|
||||||
lp_build_const_scalar(struct lp_type type,
|
lp_build_const_vec(struct lp_type type,
|
||||||
double val)
|
double val)
|
||||||
{
|
{
|
||||||
LLVMTypeRef elem_type = lp_build_elem_type(type);
|
LLVMTypeRef elem_type = lp_build_elem_type(type);
|
||||||
LLVMValueRef elems[LP_MAX_VECTOR_LENGTH];
|
LLVMValueRef elems[LP_MAX_VECTOR_LENGTH];
|
||||||
|
@ -309,7 +309,7 @@ lp_build_const_scalar(struct lp_type type,
|
||||||
|
|
||||||
|
|
||||||
LLVMValueRef
|
LLVMValueRef
|
||||||
lp_build_int_const_scalar(struct lp_type type,
|
lp_build_const_int_vec(struct lp_type type,
|
||||||
long long val)
|
long long val)
|
||||||
{
|
{
|
||||||
LLVMTypeRef elem_type = lp_build_int_elem_type(type);
|
LLVMTypeRef elem_type = lp_build_int_elem_type(type);
|
||||||
|
|
|
@ -85,13 +85,11 @@ lp_build_one(struct lp_type type);
|
||||||
|
|
||||||
|
|
||||||
LLVMValueRef
|
LLVMValueRef
|
||||||
lp_build_const_scalar(struct lp_type type,
|
lp_build_const_vec(struct lp_type type, double val);
|
||||||
double val);
|
|
||||||
|
|
||||||
|
|
||||||
LLVMValueRef
|
LLVMValueRef
|
||||||
lp_build_int_const_scalar(struct lp_type type,
|
lp_build_const_int_vec(struct lp_type type, long long val);
|
||||||
long long val);
|
|
||||||
|
|
||||||
|
|
||||||
LLVMValueRef
|
LLVMValueRef
|
||||||
|
|
|
@ -114,13 +114,13 @@ lp_build_clamped_float_to_unsigned_norm(LLVMBuilderRef builder,
|
||||||
scale = (double)mask/ubound;
|
scale = (double)mask/ubound;
|
||||||
bias = (double)((unsigned long long)1 << (mantissa - n));
|
bias = (double)((unsigned long long)1 << (mantissa - n));
|
||||||
|
|
||||||
res = LLVMBuildMul(builder, src, lp_build_const_scalar(src_type, scale), "");
|
res = LLVMBuildMul(builder, src, lp_build_const_vec(src_type, scale), "");
|
||||||
res = LLVMBuildAdd(builder, res, lp_build_const_scalar(src_type, bias), "");
|
res = LLVMBuildAdd(builder, res, lp_build_const_vec(src_type, bias), "");
|
||||||
res = LLVMBuildBitCast(builder, res, int_vec_type, "");
|
res = LLVMBuildBitCast(builder, res, int_vec_type, "");
|
||||||
|
|
||||||
if(dst_width > n) {
|
if(dst_width > n) {
|
||||||
int shift = dst_width - n;
|
int shift = dst_width - n;
|
||||||
res = LLVMBuildShl(builder, res, lp_build_int_const_scalar(src_type, shift), "");
|
res = LLVMBuildShl(builder, res, lp_build_const_int_vec(src_type, shift), "");
|
||||||
|
|
||||||
/* TODO: Fill in the empty lower bits for additional precision? */
|
/* TODO: Fill in the empty lower bits for additional precision? */
|
||||||
/* YES: this fixes progs/trivial/tri-z-eq.c.
|
/* YES: this fixes progs/trivial/tri-z-eq.c.
|
||||||
|
@ -130,21 +130,21 @@ lp_build_clamped_float_to_unsigned_norm(LLVMBuilderRef builder,
|
||||||
#if 0
|
#if 0
|
||||||
{
|
{
|
||||||
LLVMValueRef msb;
|
LLVMValueRef msb;
|
||||||
msb = LLVMBuildLShr(builder, res, lp_build_int_const_scalar(src_type, dst_width - 1), "");
|
msb = LLVMBuildLShr(builder, res, lp_build_const_int_vec(src_type, dst_width - 1), "");
|
||||||
msb = LLVMBuildShl(builder, msb, lp_build_int_const_scalar(src_type, shift), "");
|
msb = LLVMBuildShl(builder, msb, lp_build_const_int_vec(src_type, shift), "");
|
||||||
msb = LLVMBuildSub(builder, msb, lp_build_int_const_scalar(src_type, 1), "");
|
msb = LLVMBuildSub(builder, msb, lp_build_const_int_vec(src_type, 1), "");
|
||||||
res = LLVMBuildOr(builder, res, msb, "");
|
res = LLVMBuildOr(builder, res, msb, "");
|
||||||
}
|
}
|
||||||
#elif 0
|
#elif 0
|
||||||
while(shift > 0) {
|
while(shift > 0) {
|
||||||
res = LLVMBuildOr(builder, res, LLVMBuildLShr(builder, res, lp_build_int_const_scalar(src_type, n), ""), "");
|
res = LLVMBuildOr(builder, res, LLVMBuildLShr(builder, res, lp_build_const_int_vec(src_type, n), ""), "");
|
||||||
shift -= n;
|
shift -= n;
|
||||||
n *= 2;
|
n *= 2;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
res = LLVMBuildAnd(builder, res, lp_build_int_const_scalar(src_type, mask), "");
|
res = LLVMBuildAnd(builder, res, lp_build_const_int_vec(src_type, mask), "");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -183,10 +183,10 @@ lp_build_unsigned_norm_to_float(LLVMBuilderRef builder,
|
||||||
|
|
||||||
if(src_width > mantissa) {
|
if(src_width > mantissa) {
|
||||||
int shift = src_width - mantissa;
|
int shift = src_width - mantissa;
|
||||||
res = LLVMBuildLShr(builder, res, lp_build_int_const_scalar(dst_type, shift), "");
|
res = LLVMBuildLShr(builder, res, lp_build_const_int_vec(dst_type, shift), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
bias_ = lp_build_const_scalar(dst_type, bias);
|
bias_ = lp_build_const_vec(dst_type, bias);
|
||||||
|
|
||||||
res = LLVMBuildOr(builder,
|
res = LLVMBuildOr(builder,
|
||||||
res,
|
res,
|
||||||
|
@ -195,7 +195,7 @@ lp_build_unsigned_norm_to_float(LLVMBuilderRef builder,
|
||||||
res = LLVMBuildBitCast(builder, res, vec_type, "");
|
res = LLVMBuildBitCast(builder, res, vec_type, "");
|
||||||
|
|
||||||
res = LLVMBuildSub(builder, res, bias_, "");
|
res = LLVMBuildSub(builder, res, bias_, "");
|
||||||
res = LLVMBuildMul(builder, res, lp_build_const_scalar(dst_type, scale), "");
|
res = LLVMBuildMul(builder, res, lp_build_const_vec(dst_type, scale), "");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ lp_build_conv(LLVMBuilderRef builder,
|
||||||
if(dst_min == 0.0)
|
if(dst_min == 0.0)
|
||||||
thres = bld.zero;
|
thres = bld.zero;
|
||||||
else
|
else
|
||||||
thres = lp_build_const_scalar(src_type, dst_min);
|
thres = lp_build_const_vec(src_type, dst_min);
|
||||||
for(i = 0; i < num_tmps; ++i)
|
for(i = 0; i < num_tmps; ++i)
|
||||||
tmp[i] = lp_build_max(&bld, tmp[i], thres);
|
tmp[i] = lp_build_max(&bld, tmp[i], thres);
|
||||||
}
|
}
|
||||||
|
@ -260,7 +260,7 @@ lp_build_conv(LLVMBuilderRef builder,
|
||||||
if(dst_max == 1.0)
|
if(dst_max == 1.0)
|
||||||
thres = bld.one;
|
thres = bld.one;
|
||||||
else
|
else
|
||||||
thres = lp_build_const_scalar(src_type, dst_max);
|
thres = lp_build_const_vec(src_type, dst_max);
|
||||||
for(i = 0; i < num_tmps; ++i)
|
for(i = 0; i < num_tmps; ++i)
|
||||||
tmp[i] = lp_build_min(&bld, tmp[i], thres);
|
tmp[i] = lp_build_min(&bld, tmp[i], thres);
|
||||||
}
|
}
|
||||||
|
@ -288,7 +288,7 @@ lp_build_conv(LLVMBuilderRef builder,
|
||||||
LLVMTypeRef tmp_vec_type;
|
LLVMTypeRef tmp_vec_type;
|
||||||
|
|
||||||
if (dst_scale != 1.0) {
|
if (dst_scale != 1.0) {
|
||||||
LLVMValueRef scale = lp_build_const_scalar(tmp_type, dst_scale);
|
LLVMValueRef scale = lp_build_const_vec(tmp_type, dst_scale);
|
||||||
for(i = 0; i < num_tmps; ++i)
|
for(i = 0; i < num_tmps; ++i)
|
||||||
tmp[i] = LLVMBuildMul(builder, tmp[i], scale, "");
|
tmp[i] = LLVMBuildMul(builder, tmp[i], scale, "");
|
||||||
}
|
}
|
||||||
|
@ -315,7 +315,7 @@ lp_build_conv(LLVMBuilderRef builder,
|
||||||
|
|
||||||
/* FIXME: compensate different offsets too */
|
/* FIXME: compensate different offsets too */
|
||||||
if(src_shift > dst_shift) {
|
if(src_shift > dst_shift) {
|
||||||
LLVMValueRef shift = lp_build_int_const_scalar(tmp_type, src_shift - dst_shift);
|
LLVMValueRef shift = lp_build_const_int_vec(tmp_type, src_shift - dst_shift);
|
||||||
for(i = 0; i < num_tmps; ++i)
|
for(i = 0; i < num_tmps; ++i)
|
||||||
if(src_type.sign)
|
if(src_type.sign)
|
||||||
tmp[i] = LLVMBuildAShr(builder, tmp[i], shift, "");
|
tmp[i] = LLVMBuildAShr(builder, tmp[i], shift, "");
|
||||||
|
@ -388,7 +388,7 @@ lp_build_conv(LLVMBuilderRef builder,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src_scale != 1.0) {
|
if (src_scale != 1.0) {
|
||||||
LLVMValueRef scale = lp_build_const_scalar(tmp_type, 1.0/src_scale);
|
LLVMValueRef scale = lp_build_const_vec(tmp_type, 1.0/src_scale);
|
||||||
for(i = 0; i < num_tmps; ++i)
|
for(i = 0; i < num_tmps; ++i)
|
||||||
tmp[i] = LLVMBuildMul(builder, tmp[i], scale, "");
|
tmp[i] = LLVMBuildMul(builder, tmp[i], scale, "");
|
||||||
}
|
}
|
||||||
|
@ -400,7 +400,7 @@ lp_build_conv(LLVMBuilderRef builder,
|
||||||
|
|
||||||
/* FIXME: compensate different offsets too */
|
/* FIXME: compensate different offsets too */
|
||||||
if(src_shift < dst_shift) {
|
if(src_shift < dst_shift) {
|
||||||
LLVMValueRef shift = lp_build_int_const_scalar(tmp_type, dst_shift - src_shift);
|
LLVMValueRef shift = lp_build_const_int_vec(tmp_type, dst_shift - src_shift);
|
||||||
for(i = 0; i < num_tmps; ++i)
|
for(i = 0; i < num_tmps; ++i)
|
||||||
tmp[i] = LLVMBuildShl(builder, tmp[i], shift, "");
|
tmp[i] = LLVMBuildShl(builder, tmp[i], shift, "");
|
||||||
}
|
}
|
||||||
|
|
|
@ -185,11 +185,11 @@ lp_build_depth_test(LLVMBuilderRef builder,
|
||||||
if(padding_left || padding_right) {
|
if(padding_left || padding_right) {
|
||||||
const unsigned long long mask_left = ((unsigned long long)1 << (format_desc->block.bits - padding_left)) - 1;
|
const unsigned long long mask_left = ((unsigned long long)1 << (format_desc->block.bits - padding_left)) - 1;
|
||||||
const unsigned long long mask_right = ((unsigned long long)1 << (padding_right)) - 1;
|
const unsigned long long mask_right = ((unsigned long long)1 << (padding_right)) - 1;
|
||||||
z_bitmask = lp_build_int_const_scalar(type, mask_left ^ mask_right);
|
z_bitmask = lp_build_const_int_vec(type, mask_left ^ mask_right);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(padding_left)
|
if(padding_left)
|
||||||
src = LLVMBuildLShr(builder, src, lp_build_int_const_scalar(type, padding_left), "");
|
src = LLVMBuildLShr(builder, src, lp_build_const_int_vec(type, padding_left), "");
|
||||||
if(padding_right)
|
if(padding_right)
|
||||||
src = LLVMBuildAnd(builder, src, z_bitmask, "");
|
src = LLVMBuildAnd(builder, src, z_bitmask, "");
|
||||||
if(padding_left || padding_right)
|
if(padding_left || padding_right)
|
||||||
|
|
|
@ -114,10 +114,10 @@ lp_build_unpack_rgba_soa(LLVMBuilderRef builder,
|
||||||
case UTIL_FORMAT_TYPE_UNSIGNED:
|
case UTIL_FORMAT_TYPE_UNSIGNED:
|
||||||
if(type.floating) {
|
if(type.floating) {
|
||||||
if(start)
|
if(start)
|
||||||
input = LLVMBuildLShr(builder, input, lp_build_int_const_scalar(type, start), "");
|
input = LLVMBuildLShr(builder, input, lp_build_const_int_vec(type, start), "");
|
||||||
if(stop < format_desc->block.bits) {
|
if(stop < format_desc->block.bits) {
|
||||||
unsigned mask = ((unsigned long long)1 << width) - 1;
|
unsigned mask = ((unsigned long long)1 << width) - 1;
|
||||||
input = LLVMBuildAnd(builder, input, lp_build_int_const_scalar(type, mask), "");
|
input = LLVMBuildAnd(builder, input, lp_build_const_int_vec(type, mask), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(format_desc->channel[chan].normalized)
|
if(format_desc->channel[chan].normalized)
|
||||||
|
|
|
@ -289,17 +289,17 @@ pos_update(struct lp_build_interp_soa_context *bld, int quad_index)
|
||||||
/* top-right or bottom-right quad in block */
|
/* top-right or bottom-right quad in block */
|
||||||
/* build x += xstep */
|
/* build x += xstep */
|
||||||
x = lp_build_add(&bld->base, x,
|
x = lp_build_add(&bld->base, x,
|
||||||
lp_build_const_scalar(bld->base.type, xstep));
|
lp_build_const_vec(bld->base.type, xstep));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quad_index == 2) {
|
if (quad_index == 2) {
|
||||||
/* bottom-left quad in block */
|
/* bottom-left quad in block */
|
||||||
/* build y += ystep */
|
/* build y += ystep */
|
||||||
y = lp_build_add(&bld->base, y,
|
y = lp_build_add(&bld->base, y,
|
||||||
lp_build_const_scalar(bld->base.type, ystep));
|
lp_build_const_vec(bld->base.type, ystep));
|
||||||
/* build x -= xstep */
|
/* build x -= xstep */
|
||||||
x = lp_build_sub(&bld->base, x,
|
x = lp_build_sub(&bld->base, x,
|
||||||
lp_build_const_scalar(bld->base.type, xstep));
|
lp_build_const_vec(bld->base.type, xstep));
|
||||||
}
|
}
|
||||||
|
|
||||||
lp_build_name(x, "pos.x");
|
lp_build_name(x, "pos.x");
|
||||||
|
|
|
@ -193,7 +193,7 @@ lp_build_compare(LLVMBuilderRef builder,
|
||||||
if(table[func].gt &&
|
if(table[func].gt &&
|
||||||
((type.width == 8 && type.sign) ||
|
((type.width == 8 && type.sign) ||
|
||||||
(type.width != 8 && !type.sign))) {
|
(type.width != 8 && !type.sign))) {
|
||||||
LLVMValueRef msb = lp_build_int_const_scalar(type, (unsigned long long)1 << (type.width - 1));
|
LLVMValueRef msb = lp_build_const_int_vec(type, (unsigned long long)1 << (type.width - 1));
|
||||||
a = LLVMBuildXor(builder, a, msb, "");
|
a = LLVMBuildXor(builder, a, msb, "");
|
||||||
b = LLVMBuildXor(builder, b, msb, "");
|
b = LLVMBuildXor(builder, b, msb, "");
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ lp_build_unpack2(LLVMBuilderRef builder,
|
||||||
|
|
||||||
if(dst_type.sign && src_type.sign) {
|
if(dst_type.sign && src_type.sign) {
|
||||||
/* Replicate the sign bit in the most significant bits */
|
/* Replicate the sign bit in the most significant bits */
|
||||||
msb = LLVMBuildAShr(builder, src, lp_build_int_const_scalar(src_type, src_type.width - 1), "");
|
msb = LLVMBuildAShr(builder, src, lp_build_const_int_vec(src_type, src_type.width - 1), "");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Most significant bits always zero */
|
/* Most significant bits always zero */
|
||||||
|
@ -361,7 +361,7 @@ lp_build_packs2(LLVMBuilderRef builder,
|
||||||
if(clamp) {
|
if(clamp) {
|
||||||
struct lp_build_context bld;
|
struct lp_build_context bld;
|
||||||
unsigned dst_bits = dst_type.sign ? dst_type.width - 1 : dst_type.width;
|
unsigned dst_bits = dst_type.sign ? dst_type.width - 1 : dst_type.width;
|
||||||
LLVMValueRef dst_max = lp_build_int_const_scalar(src_type, ((unsigned long long)1 << dst_bits) - 1);
|
LLVMValueRef dst_max = lp_build_const_int_vec(src_type, ((unsigned long long)1 << dst_bits) - 1);
|
||||||
lp_build_context_init(&bld, builder, src_type);
|
lp_build_context_init(&bld, builder, src_type);
|
||||||
lo = lp_build_min(&bld, lo, dst_max);
|
lo = lp_build_min(&bld, lo, dst_max);
|
||||||
hi = lp_build_min(&bld, hi, dst_max);
|
hi = lp_build_min(&bld, hi, dst_max);
|
||||||
|
|
|
@ -173,7 +173,7 @@ lp_build_sample_offset(struct lp_build_context *bld,
|
||||||
LLVMValueRef x_stride;
|
LLVMValueRef x_stride;
|
||||||
LLVMValueRef offset;
|
LLVMValueRef offset;
|
||||||
|
|
||||||
x_stride = lp_build_const_scalar(bld->type, format_desc->block.bits/8);
|
x_stride = lp_build_const_vec(bld->type, format_desc->block.bits/8);
|
||||||
|
|
||||||
if(format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) {
|
if(format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) {
|
||||||
LLVMValueRef x_lo, x_hi;
|
LLVMValueRef x_lo, x_hi;
|
||||||
|
@ -195,9 +195,9 @@ lp_build_sample_offset(struct lp_build_context *bld,
|
||||||
y_hi = LLVMBuildLShr(bld->builder, y, bld->one, "");
|
y_hi = LLVMBuildLShr(bld->builder, y, bld->one, "");
|
||||||
|
|
||||||
x_stride_lo = x_stride;
|
x_stride_lo = x_stride;
|
||||||
y_stride_lo = lp_build_const_scalar(bld->type, 2*format_desc->block.bits/8);
|
y_stride_lo = lp_build_const_vec(bld->type, 2*format_desc->block.bits/8);
|
||||||
|
|
||||||
x_stride_hi = lp_build_const_scalar(bld->type, 4*format_desc->block.bits/8);
|
x_stride_hi = lp_build_const_vec(bld->type, 4*format_desc->block.bits/8);
|
||||||
y_stride_hi = LLVMBuildShl(bld->builder, y_stride, bld->one, "");
|
y_stride_hi = LLVMBuildShl(bld->builder, y_stride, bld->one, "");
|
||||||
|
|
||||||
x_offset_lo = lp_build_mul(bld, x_lo, x_stride_lo);
|
x_offset_lo = lp_build_mul(bld, x_lo, x_stride_lo);
|
||||||
|
|
|
@ -292,7 +292,7 @@ lp_build_sample_texel_soa(struct lp_build_sample_context *bld,
|
||||||
int chan;
|
int chan;
|
||||||
for (chan = 0; chan < 4; chan++) {
|
for (chan = 0; chan < 4; chan++) {
|
||||||
LLVMValueRef border_chan =
|
LLVMValueRef border_chan =
|
||||||
lp_build_const_scalar(bld->texel_type,
|
lp_build_const_vec(bld->texel_type,
|
||||||
bld->static_state->border_color[chan]);
|
bld->static_state->border_color[chan]);
|
||||||
texel[chan] = lp_build_select(&bld->texel_bld, use_border,
|
texel[chan] = lp_build_select(&bld->texel_bld, use_border,
|
||||||
border_chan, texel[chan]);
|
border_chan, texel[chan]);
|
||||||
|
@ -457,8 +457,8 @@ lp_build_sample_wrap_linear(struct lp_build_sample_context *bld,
|
||||||
struct lp_build_context *coord_bld = &bld->coord_bld;
|
struct lp_build_context *coord_bld = &bld->coord_bld;
|
||||||
struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
|
struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
|
||||||
struct lp_build_context *uint_coord_bld = &bld->uint_coord_bld;
|
struct lp_build_context *uint_coord_bld = &bld->uint_coord_bld;
|
||||||
LLVMValueRef two = lp_build_const_scalar(coord_bld->type, 2.0);
|
LLVMValueRef two = lp_build_const_vec(coord_bld->type, 2.0);
|
||||||
LLVMValueRef half = lp_build_const_scalar(coord_bld->type, 0.5);
|
LLVMValueRef half = lp_build_const_vec(coord_bld->type, 0.5);
|
||||||
LLVMValueRef length_f = lp_build_int_to_float(coord_bld, length);
|
LLVMValueRef length_f = lp_build_int_to_float(coord_bld, length);
|
||||||
LLVMValueRef length_minus_one = lp_build_sub(uint_coord_bld, length, uint_coord_bld->one);
|
LLVMValueRef length_minus_one = lp_build_sub(uint_coord_bld, length, uint_coord_bld->one);
|
||||||
LLVMValueRef length_f_minus_one = lp_build_sub(coord_bld, length_f, coord_bld->one);
|
LLVMValueRef length_f_minus_one = lp_build_sub(coord_bld, length_f, coord_bld->one);
|
||||||
|
@ -512,7 +512,7 @@ lp_build_sample_wrap_linear(struct lp_build_sample_context *bld,
|
||||||
else {
|
else {
|
||||||
LLVMValueRef min, max;
|
LLVMValueRef min, max;
|
||||||
/* clamp to [0.5, length - 0.5] */
|
/* clamp to [0.5, length - 0.5] */
|
||||||
min = lp_build_const_scalar(coord_bld->type, 0.5F);
|
min = lp_build_const_vec(coord_bld->type, 0.5F);
|
||||||
max = lp_build_sub(coord_bld, length_f, min);
|
max = lp_build_sub(coord_bld, length_f, min);
|
||||||
coord = lp_build_clamp(coord_bld, coord, min, max);
|
coord = lp_build_clamp(coord_bld, coord, min, max);
|
||||||
}
|
}
|
||||||
|
@ -533,7 +533,7 @@ lp_build_sample_wrap_linear(struct lp_build_sample_context *bld,
|
||||||
if (bld->static_state->normalized_coords) {
|
if (bld->static_state->normalized_coords) {
|
||||||
/* min = -1.0 / (2 * length) = -0.5 / length */
|
/* min = -1.0 / (2 * length) = -0.5 / length */
|
||||||
min = lp_build_mul(coord_bld,
|
min = lp_build_mul(coord_bld,
|
||||||
lp_build_const_scalar(coord_bld->type, -0.5F),
|
lp_build_const_vec(coord_bld->type, -0.5F),
|
||||||
lp_build_rcp(coord_bld, length_f));
|
lp_build_rcp(coord_bld, length_f));
|
||||||
/* max = 1.0 - min */
|
/* max = 1.0 - min */
|
||||||
max = lp_build_sub(coord_bld, coord_bld->one, min);
|
max = lp_build_sub(coord_bld, coord_bld->one, min);
|
||||||
|
@ -545,7 +545,7 @@ lp_build_sample_wrap_linear(struct lp_build_sample_context *bld,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* clamp to [-0.5, length + 0.5] */
|
/* clamp to [-0.5, length + 0.5] */
|
||||||
min = lp_build_const_scalar(coord_bld->type, -0.5F);
|
min = lp_build_const_vec(coord_bld->type, -0.5F);
|
||||||
max = lp_build_sub(coord_bld, length_f, min);
|
max = lp_build_sub(coord_bld, length_f, min);
|
||||||
coord = lp_build_clamp(coord_bld, coord, min, max);
|
coord = lp_build_clamp(coord_bld, coord, min, max);
|
||||||
coord = lp_build_sub(coord_bld, coord, half);
|
coord = lp_build_sub(coord_bld, coord, half);
|
||||||
|
@ -620,7 +620,7 @@ lp_build_sample_wrap_linear(struct lp_build_sample_context *bld,
|
||||||
LLVMValueRef min, max;
|
LLVMValueRef min, max;
|
||||||
/* min = -1.0 / (2 * length) = -0.5 / length */
|
/* min = -1.0 / (2 * length) = -0.5 / length */
|
||||||
min = lp_build_mul(coord_bld,
|
min = lp_build_mul(coord_bld,
|
||||||
lp_build_const_scalar(coord_bld->type, -0.5F),
|
lp_build_const_vec(coord_bld->type, -0.5F),
|
||||||
lp_build_rcp(coord_bld, length_f));
|
lp_build_rcp(coord_bld, length_f));
|
||||||
/* max = 1.0 - min */
|
/* max = 1.0 - min */
|
||||||
max = lp_build_sub(coord_bld, coord_bld->one, min);
|
max = lp_build_sub(coord_bld, coord_bld->one, min);
|
||||||
|
@ -665,7 +665,7 @@ lp_build_sample_wrap_nearest(struct lp_build_sample_context *bld,
|
||||||
struct lp_build_context *coord_bld = &bld->coord_bld;
|
struct lp_build_context *coord_bld = &bld->coord_bld;
|
||||||
struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
|
struct lp_build_context *int_coord_bld = &bld->int_coord_bld;
|
||||||
struct lp_build_context *uint_coord_bld = &bld->uint_coord_bld;
|
struct lp_build_context *uint_coord_bld = &bld->uint_coord_bld;
|
||||||
LLVMValueRef two = lp_build_const_scalar(coord_bld->type, 2.0);
|
LLVMValueRef two = lp_build_const_vec(coord_bld->type, 2.0);
|
||||||
LLVMValueRef length_f = lp_build_int_to_float(coord_bld, length);
|
LLVMValueRef length_f = lp_build_int_to_float(coord_bld, length);
|
||||||
LLVMValueRef length_minus_one = lp_build_sub(uint_coord_bld, length, uint_coord_bld->one);
|
LLVMValueRef length_minus_one = lp_build_sub(uint_coord_bld, length, uint_coord_bld->one);
|
||||||
LLVMValueRef length_f_minus_one = lp_build_sub(coord_bld, length_f, coord_bld->one);
|
LLVMValueRef length_f_minus_one = lp_build_sub(coord_bld, length_f, coord_bld->one);
|
||||||
|
@ -708,7 +708,7 @@ lp_build_sample_wrap_nearest(struct lp_build_sample_context *bld,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* clamp to [0.5, length - 0.5] */
|
/* clamp to [0.5, length - 0.5] */
|
||||||
min = lp_build_const_scalar(coord_bld->type, 0.5F);
|
min = lp_build_const_vec(coord_bld->type, 0.5F);
|
||||||
max = lp_build_sub(coord_bld, length_f, min);
|
max = lp_build_sub(coord_bld, length_f, min);
|
||||||
}
|
}
|
||||||
/* coord = clamp(coord, min, max) */
|
/* coord = clamp(coord, min, max) */
|
||||||
|
@ -724,7 +724,7 @@ lp_build_sample_wrap_nearest(struct lp_build_sample_context *bld,
|
||||||
if (bld->static_state->normalized_coords) {
|
if (bld->static_state->normalized_coords) {
|
||||||
/* min = -1.0 / (2 * length) = -0.5 / length */
|
/* min = -1.0 / (2 * length) = -0.5 / length */
|
||||||
min = lp_build_mul(coord_bld,
|
min = lp_build_mul(coord_bld,
|
||||||
lp_build_const_scalar(coord_bld->type, -0.5F),
|
lp_build_const_vec(coord_bld->type, -0.5F),
|
||||||
lp_build_rcp(coord_bld, length_f));
|
lp_build_rcp(coord_bld, length_f));
|
||||||
/* max = length - min */
|
/* max = length - min */
|
||||||
max = lp_build_sub(coord_bld, length_f, min);
|
max = lp_build_sub(coord_bld, length_f, min);
|
||||||
|
@ -733,7 +733,7 @@ lp_build_sample_wrap_nearest(struct lp_build_sample_context *bld,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* clamp to [-0.5, length + 0.5] */
|
/* clamp to [-0.5, length + 0.5] */
|
||||||
min = lp_build_const_scalar(coord_bld->type, -0.5F);
|
min = lp_build_const_vec(coord_bld->type, -0.5F);
|
||||||
max = lp_build_sub(coord_bld, length_f, min);
|
max = lp_build_sub(coord_bld, length_f, min);
|
||||||
}
|
}
|
||||||
/* coord = clamp(coord, min, max) */
|
/* coord = clamp(coord, min, max) */
|
||||||
|
@ -1226,7 +1226,7 @@ static LLVMValueRef
|
||||||
lp_build_cube_ima(struct lp_build_context *coord_bld, LLVMValueRef coord)
|
lp_build_cube_ima(struct lp_build_context *coord_bld, LLVMValueRef coord)
|
||||||
{
|
{
|
||||||
/* ima = -0.5 / abs(coord); */
|
/* ima = -0.5 / abs(coord); */
|
||||||
LLVMValueRef negHalf = lp_build_const_scalar(coord_bld->type, -0.5);
|
LLVMValueRef negHalf = lp_build_const_vec(coord_bld->type, -0.5);
|
||||||
LLVMValueRef absCoord = lp_build_abs(coord_bld, coord);
|
LLVMValueRef absCoord = lp_build_abs(coord_bld, coord);
|
||||||
LLVMValueRef ima = lp_build_mul(coord_bld, negHalf,
|
LLVMValueRef ima = lp_build_mul(coord_bld, negHalf,
|
||||||
lp_build_rcp(coord_bld, absCoord));
|
lp_build_rcp(coord_bld, absCoord));
|
||||||
|
@ -1246,7 +1246,7 @@ lp_build_cube_coord(struct lp_build_context *coord_bld,
|
||||||
LLVMValueRef coord, LLVMValueRef ima)
|
LLVMValueRef coord, LLVMValueRef ima)
|
||||||
{
|
{
|
||||||
/* return negate(coord) * ima * sign + 0.5; */
|
/* return negate(coord) * ima * sign + 0.5; */
|
||||||
LLVMValueRef half = lp_build_const_scalar(coord_bld->type, 0.5);
|
LLVMValueRef half = lp_build_const_vec(coord_bld->type, 0.5);
|
||||||
LLVMValueRef res;
|
LLVMValueRef res;
|
||||||
|
|
||||||
assert(negate_coord == +1 || negate_coord == -1);
|
assert(negate_coord == +1 || negate_coord == -1);
|
||||||
|
@ -1708,7 +1708,7 @@ lp_build_rgba8_to_f32_soa(LLVMBuilderRef builder,
|
||||||
LLVMValueRef packed,
|
LLVMValueRef packed,
|
||||||
LLVMValueRef *rgba)
|
LLVMValueRef *rgba)
|
||||||
{
|
{
|
||||||
LLVMValueRef mask = lp_build_int_const_scalar(dst_type, 0xff);
|
LLVMValueRef mask = lp_build_const_int_vec(dst_type, 0xff);
|
||||||
unsigned chan;
|
unsigned chan;
|
||||||
|
|
||||||
/* Decode the input vector components */
|
/* Decode the input vector components */
|
||||||
|
@ -1720,7 +1720,7 @@ lp_build_rgba8_to_f32_soa(LLVMBuilderRef builder,
|
||||||
input = packed;
|
input = packed;
|
||||||
|
|
||||||
if(start)
|
if(start)
|
||||||
input = LLVMBuildLShr(builder, input, lp_build_int_const_scalar(dst_type, start), "");
|
input = LLVMBuildLShr(builder, input, lp_build_const_int_vec(dst_type, start), "");
|
||||||
|
|
||||||
if(stop < 32)
|
if(stop < 32)
|
||||||
input = LLVMBuildAnd(builder, input, mask, "");
|
input = LLVMBuildAnd(builder, input, mask, "");
|
||||||
|
@ -1782,17 +1782,17 @@ lp_build_sample_2d_linear_aos(struct lp_build_sample_context *bld,
|
||||||
t = LLVMBuildFPToSI(builder, t, i32_vec_type, "");
|
t = LLVMBuildFPToSI(builder, t, i32_vec_type, "");
|
||||||
|
|
||||||
/* subtract 0.5 (add -128) */
|
/* subtract 0.5 (add -128) */
|
||||||
i32_c128 = lp_build_int_const_scalar(i32.type, -128);
|
i32_c128 = lp_build_const_int_vec(i32.type, -128);
|
||||||
s = LLVMBuildAdd(builder, s, i32_c128, "");
|
s = LLVMBuildAdd(builder, s, i32_c128, "");
|
||||||
t = LLVMBuildAdd(builder, t, i32_c128, "");
|
t = LLVMBuildAdd(builder, t, i32_c128, "");
|
||||||
|
|
||||||
/* compute floor (shift right 8) */
|
/* compute floor (shift right 8) */
|
||||||
i32_c8 = lp_build_int_const_scalar(i32.type, 8);
|
i32_c8 = lp_build_const_int_vec(i32.type, 8);
|
||||||
s_ipart = LLVMBuildAShr(builder, s, i32_c8, "");
|
s_ipart = LLVMBuildAShr(builder, s, i32_c8, "");
|
||||||
t_ipart = LLVMBuildAShr(builder, t, i32_c8, "");
|
t_ipart = LLVMBuildAShr(builder, t, i32_c8, "");
|
||||||
|
|
||||||
/* compute fractional part (AND with 0xff) */
|
/* compute fractional part (AND with 0xff) */
|
||||||
i32_c255 = lp_build_int_const_scalar(i32.type, 255);
|
i32_c255 = lp_build_const_int_vec(i32.type, 255);
|
||||||
s_fpart = LLVMBuildAnd(builder, s, i32_c255, "");
|
s_fpart = LLVMBuildAnd(builder, s, i32_c255, "");
|
||||||
t_fpart = LLVMBuildAnd(builder, t, i32_c255, "");
|
t_fpart = LLVMBuildAnd(builder, t, i32_c255, "");
|
||||||
|
|
||||||
|
@ -1959,7 +1959,7 @@ lp_build_sample_compare(struct lp_build_sample_context *bld,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(res);
|
assert(res);
|
||||||
res = lp_build_mul(texel_bld, res, lp_build_const_scalar(texel_bld->type, 0.25));
|
res = lp_build_mul(texel_bld, res, lp_build_const_vec(texel_bld->type, 0.25));
|
||||||
|
|
||||||
/* XXX returning result for default GL_DEPTH_TEXTURE_MODE = GL_LUMINANCE */
|
/* XXX returning result for default GL_DEPTH_TEXTURE_MODE = GL_LUMINANCE */
|
||||||
for(chan = 0; chan < 3; ++chan)
|
for(chan = 0; chan < 3; ++chan)
|
||||||
|
|
|
@ -144,9 +144,9 @@ lp_build_broadcast_aos(struct lp_build_context *bld,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(shift > 0)
|
if(shift > 0)
|
||||||
tmp = LLVMBuildLShr(bld->builder, a, lp_build_int_const_scalar(type4, shift*type.width), "");
|
tmp = LLVMBuildLShr(bld->builder, a, lp_build_const_int_vec(type4, shift*type.width), "");
|
||||||
if(shift < 0)
|
if(shift < 0)
|
||||||
tmp = LLVMBuildShl(bld->builder, a, lp_build_int_const_scalar(type4, -shift*type.width), "");
|
tmp = LLVMBuildShl(bld->builder, a, lp_build_const_int_vec(type4, -shift*type.width), "");
|
||||||
|
|
||||||
assert(tmp);
|
assert(tmp);
|
||||||
if(tmp)
|
if(tmp)
|
||||||
|
|
|
@ -475,7 +475,7 @@ emit_store(
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_SAT_MINUS_PLUS_ONE:
|
case TGSI_SAT_MINUS_PLUS_ONE:
|
||||||
value = lp_build_max(&bld->base, value, lp_build_const_scalar(bld->base.type, -1.0));
|
value = lp_build_max(&bld->base, value, lp_build_const_vec(bld->base.type, -1.0));
|
||||||
value = lp_build_min(&bld->base, value, bld->base.one);
|
value = lp_build_min(&bld->base, value, bld->base.one);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -996,7 +996,7 @@ emit_instruction(
|
||||||
src0 = emit_fetch( bld, inst, 0, chan_index );
|
src0 = emit_fetch( bld, inst, 0, chan_index );
|
||||||
src1 = emit_fetch( bld, inst, 1, chan_index );
|
src1 = emit_fetch( bld, inst, 1, chan_index );
|
||||||
src2 = emit_fetch( bld, inst, 2, chan_index );
|
src2 = emit_fetch( bld, inst, 2, chan_index );
|
||||||
tmp1 = lp_build_const_scalar(bld->base.type, 0.5);
|
tmp1 = lp_build_const_vec(bld->base.type, 0.5);
|
||||||
tmp0 = lp_build_cmp( &bld->base, PIPE_FUNC_GREATER, src2, tmp1);
|
tmp0 = lp_build_cmp( &bld->base, PIPE_FUNC_GREATER, src2, tmp1);
|
||||||
dst0[chan_index] = lp_build_select( &bld->base, tmp0, src0, src1 );
|
dst0[chan_index] = lp_build_select( &bld->base, tmp0, src0, src1 );
|
||||||
}
|
}
|
||||||
|
@ -1713,7 +1713,7 @@ lp_build_tgsi_soa(LLVMBuilderRef builder,
|
||||||
assert(num_immediates < LP_MAX_IMMEDIATES);
|
assert(num_immediates < LP_MAX_IMMEDIATES);
|
||||||
for( i = 0; i < size; ++i )
|
for( i = 0; i < size; ++i )
|
||||||
bld.immediates[num_immediates][i] =
|
bld.immediates[num_immediates][i] =
|
||||||
lp_build_const_scalar(type, parse.FullToken.FullImmediate.u[i].Float);
|
lp_build_const_vec(type, parse.FullToken.FullImmediate.u[i].Float);
|
||||||
for( i = size; i < 4; ++i )
|
for( i = size; i < 4; ++i )
|
||||||
bld.immediates[num_immediates][i] = bld.base.undef;
|
bld.immediates[num_immediates][i] = bld.base.undef;
|
||||||
num_immediates++;
|
num_immediates++;
|
||||||
|
|
|
@ -252,7 +252,7 @@ generate_tri_edge_mask(LLVMBuilderRef builder,
|
||||||
LLVMConstInt(LLVMInt32Type(), INT_MIN, 0),
|
LLVMConstInt(LLVMInt32Type(), INT_MIN, 0),
|
||||||
"");
|
"");
|
||||||
|
|
||||||
in_out_mask = lp_build_int_const_scalar(i32_type, ~0);
|
in_out_mask = lp_build_const_int_vec(i32_type, ~0);
|
||||||
|
|
||||||
|
|
||||||
lp_build_flow_scope_declare(flow, &in_out_mask);
|
lp_build_flow_scope_declare(flow, &in_out_mask);
|
||||||
|
@ -367,7 +367,7 @@ build_int32_vec_const(int value)
|
||||||
i32_type.norm = FALSE; /* values are not normalized */
|
i32_type.norm = FALSE; /* values are not normalized */
|
||||||
i32_type.width = 32; /* 32-bit int values */
|
i32_type.width = 32; /* 32-bit int values */
|
||||||
i32_type.length = 4; /* 4 elements per vector */
|
i32_type.length = 4; /* 4 elements per vector */
|
||||||
return lp_build_int_const_scalar(i32_type, value);
|
return lp_build_const_int_vec(i32_type, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue