summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2012-11-30 18:06:46 +0000
committerJosé Fonseca <[email protected]>2012-12-03 14:02:43 +0000
commit6a2f2300a8f9f3b007350546d6aba468d04f4430 (patch)
treeedf5c062a8ef8775f8ce01adfe6ae60d8479c22d
parent03aa3fd54bd8824d90307b3fbe5e26606212be40 (diff)
llvmpipe: Refactor convert_to/from_blend_type to convert in place.
This fixes the "Source and destination overlap in memcpy" valgrind warnings. Reviewed-by: Roland Scheidegger <[email protected]>
-rw-r--r--src/gallium/drivers/llvmpipe/lp_state_fs.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index 758dcef328f..dcd11b65c8f 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -1075,10 +1075,10 @@ convert_to_blend_type(struct gallivm_state *gallivm,
const struct util_format_description *src_fmt,
struct lp_type src_type,
struct lp_type dst_type,
- LLVMValueRef* src,
- unsigned num_srcs,
- LLVMValueRef* dst)
+ LLVMValueRef* src, // and dst
+ unsigned num_srcs)
{
+ LLVMValueRef *dst = src;
LLVMBuilderRef builder = gallivm->builder;
struct lp_type blend_type;
struct lp_type mem_type;
@@ -1086,8 +1086,6 @@ convert_to_blend_type(struct gallivm_state *gallivm,
unsigned pixels = 16 / num_srcs;
bool is_arith;
- memcpy(dst, src, sizeof(LLVMValueRef) * num_srcs);
-
lp_mem_type_from_format_desc(src_fmt, &mem_type);
lp_blend_type_from_format_desc(src_fmt, &blend_type);
@@ -1177,10 +1175,10 @@ convert_from_blend_type(struct gallivm_state *gallivm,
const struct util_format_description *src_fmt,
struct lp_type src_type,
struct lp_type dst_type,
- LLVMValueRef* src,
- unsigned num_srcs,
- LLVMValueRef* dst)
+ LLVMValueRef* src, // and dst
+ unsigned num_srcs)
{
+ LLVMValueRef* dst = src;
unsigned i, j, k;
struct lp_type mem_type;
struct lp_type blend_type;
@@ -1188,8 +1186,6 @@ convert_from_blend_type(struct gallivm_state *gallivm,
unsigned pixels = 16 / num_srcs;
bool is_arith;
- memcpy(dst, src, sizeof(LLVMValueRef) * num_srcs);
-
lp_mem_type_from_format_desc(src_fmt, &mem_type);
lp_blend_type_from_format_desc(src_fmt, &blend_type);
@@ -1644,7 +1640,7 @@ generate_unswizzled_blend(struct gallivm_state *gallivm,
/*
* Blending
*/
- convert_to_blend_type(gallivm, out_format_desc, dst_type, row_type, dst, src_count, dst);
+ convert_to_blend_type(gallivm, out_format_desc, dst_type, row_type, dst, src_count);
for (i = 0; i < src_count; ++i) {
dst[i] = lp_build_blend_aos(gallivm,
@@ -1662,7 +1658,7 @@ generate_unswizzled_blend(struct gallivm_state *gallivm,
pad_inline ? 4 : dst_channels);
}
- convert_from_blend_type(gallivm, out_format_desc, row_type, dst_type, dst, src_count, dst);
+ convert_from_blend_type(gallivm, out_format_desc, row_type, dst_type, dst, src_count);
/* Split the blend rows back to memory rows */
if (dst_count > src_count) {