diff options
author | Tom Stellard <[email protected]> | 2012-01-11 13:05:16 -0500 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2012-01-30 13:37:00 -0500 |
commit | 52049744620854487012151a7ac26ca978905411 (patch) | |
tree | 9cdffc229e20c0bc2e593b438c8e9adde6a25745 /src | |
parent | df169457909e1985c65e8a19c245133d2f5f013d (diff) |
gallivm: Add function lp_bld_gather_values()
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_gather.c | 17 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_gather.h | 4 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_gather.c b/src/gallium/auxiliary/gallivm/lp_bld_gather.c index 0dc81b1abbe..1bdd4e4845a 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_gather.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_gather.c @@ -147,3 +147,20 @@ lp_build_gather(struct gallivm_state *gallivm, return res; } + +LLVMValueRef +lp_build_gather_values(struct gallivm_state * gallivm, + LLVMValueRef * values, + unsigned value_count) +{ + LLVMTypeRef vec_type = LLVMVectorType(LLVMTypeOf(values[0]), value_count); + LLVMBuilderRef builder = gallivm->builder; + LLVMValueRef vec = LLVMGetUndef(vec_type); + unsigned i; + + for (i = 0; i < value_count; i++) { + LLVMValueRef index = lp_build_const_int32(gallivm, i); + vec = LLVMBuildInsertElement(builder, vec, values[i], index, ""); + } + return vec; +} diff --git a/src/gallium/auxiliary/gallivm/lp_bld_gather.h b/src/gallium/auxiliary/gallivm/lp_bld_gather.h index 5b041317302..8e4c07d82b8 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_gather.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_gather.h @@ -57,5 +57,9 @@ lp_build_gather(struct gallivm_state *gallivm, LLVMValueRef base_ptr, LLVMValueRef offsets); +LLVMValueRef +lp_build_gather_values(struct gallivm_state * gallivm, + LLVMValueRef * values, + unsigned value_count); #endif /* LP_BLD_GATHER_H_ */ |