diff options
author | José Fonseca <jfonseca@vmware.com> | 2009-10-22 18:28:37 +0100 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2009-10-22 19:12:13 +0100 |
commit | 4458695bdafb13eba639d986e2f20953f0f7445c (patch) | |
tree | d8d6314f730b0ec963a79861cb3db98eaf0552be | |
parent | 421507de06bd42a322c5864d887e67e385eb458c (diff) |
llvmpipe: Utility function to double the bit width of a type.
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_type.c | 29 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_type.h | 4 |
2 files changed, 28 insertions, 5 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_bld_type.c b/src/gallium/drivers/llvmpipe/lp_bld_type.c index 606243d6c5..1320a26721 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_type.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_type.c @@ -160,12 +160,31 @@ lp_build_int_vec_type(struct lp_type type) struct lp_type lp_int_type(struct lp_type type) { - struct lp_type int_type; + struct lp_type res_type; - memset(&int_type, 0, sizeof int_type); - int_type.width = type.width; - int_type.length = type.length; - return int_type; + memset(&res_type, 0, sizeof res_type); + res_type.width = type.width; + res_type.length = type.length; + + return res_type; +} + + +/** + * Return the type with twice the bit width (hence half the number of elements). + */ +struct lp_type +lp_wider_type(struct lp_type type) +{ + struct lp_type res_type; + + memcpy(&res_type, &type, sizeof res_type); + res_type.width *= 2; + res_type.length /= 2; + + assert(res_type.length); + + return res_type; } diff --git a/src/gallium/drivers/llvmpipe/lp_bld_type.h b/src/gallium/drivers/llvmpipe/lp_bld_type.h index ee5ca3483c..46c298fa20 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_type.h +++ b/src/gallium/drivers/llvmpipe/lp_bld_type.h @@ -166,6 +166,10 @@ struct lp_type lp_int_type(struct lp_type type); +struct lp_type +lp_wider_type(struct lp_type type); + + void lp_build_context_init(struct lp_build_context *bld, LLVMBuilderRef builder, |