diff options
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_type.c | 20 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_type.h | 12 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.c b/src/gallium/auxiliary/gallivm/lp_bld_type.c index aac3a57bc73..06f1aae6dcc 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_type.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c @@ -372,7 +372,23 @@ lp_build_context_init(struct lp_build_context *bld, { bld->builder = builder; bld->type = type; - bld->undef = lp_build_undef(type); - bld->zero = lp_build_zero(type); + + bld->int_elem_type = lp_build_int_elem_type(type); + if (type.floating) + bld->elem_type = lp_build_elem_type(type); + else + bld->elem_type = bld->int_elem_type; + + if (type.length == 1) { + bld->int_vec_type = bld->int_elem_type; + bld->vec_type = bld->elem_type; + } + else { + bld->int_vec_type = LLVMVectorType(bld->int_elem_type, type.length); + bld->vec_type = LLVMVectorType(bld->elem_type, type.length); + } + + bld->undef = LLVMGetUndef(bld->vec_type); + bld->zero = LLVMConstNull(bld->vec_type); bld->one = lp_build_one(type); } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.h b/src/gallium/auxiliary/gallivm/lp_bld_type.h index 17819d4d32a..df77ef21551 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_type.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.h @@ -129,6 +129,18 @@ struct lp_build_context struct lp_type type; /** Same as lp_build_undef(type) */ + LLVMTypeRef elem_type; + + /** Same as lp_build_undef(type) */ + LLVMTypeRef vec_type; + + /** Same as lp_build_undef(type) */ + LLVMTypeRef int_elem_type; + + /** Same as lp_build_undef(type) */ + LLVMTypeRef int_vec_type; + + /** Same as lp_build_undef(type) */ LLVMValueRef undef; /** Same as lp_build_zero(type) */ |