[Mesa-dev] [PATCH] llvmpipe: Refactor convert_to/from_blend_type to convert in place.

Roland Scheidegger sroland at vmware.com
Fri Nov 30 10:39:17 PST 2012


Am 30.11.2012 19:08, schrieb jfonseca at vmware.com:
> From: José Fonseca <jfonseca at vmware.com>
> 
> This fixes the "Source and destination overlap in memcpy" valgrind
> warnings.
> ---
>  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 6819d33..9b10800 100644
> --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
> +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
> @@ -1077,10 +1077,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;
> @@ -1088,8 +1088,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);
>  
> @@ -1179,10 +1177,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;
> @@ -1190,8 +1188,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);
>  
> @@ -1646,7 +1642,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,
> @@ -1664,7 +1660,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) {
> 

Reviewed-by: Roland Scheidegger <sroland at vmware.com>




More information about the mesa-dev mailing list