From 6a2f2300a8f9f3b007350546d6aba468d04f4430 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 30 Nov 2012 18:06:46 +0000 Subject: [PATCH] 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 --- src/gallium/drivers/llvmpipe/lp_state_fs.c | 20 ++++++++------------ 1 file 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) { -- 2.30.2