[Mesa-dev] [PATCH] llvmpipe: Use saturating add/sub for UNORM formats

Jose Fonseca jfonseca at vmware.com
Fri Jun 7 08:34:52 PDT 2013


Looks good to me.

Jose

----- Original Message -----
> lp_build_add and lp_build_sub have fallback code for cases
> that cannot be handled by known intrinsics.  For UNORM formats,
> this code was using modulo rather than saturating arithmetic.
> 
> This fixes some rendering issues for a gnome session on System z.
> It also fixes various piglit tests on z, such as
> spec/ARB_color_buffer_float/GL_RGBA8-render.
> 
> The patch deliberately doesn't tackle the more complicated
> SNORM case.
> 
> Tested against piglit on x86_64 and System z with no regressions.
> 
> Signed-off-by: Richard Sandiford <rsandifo at linux.vnet.ibm.com>
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_arit.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> index 3291ec4..08aec79 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> @@ -386,6 +386,10 @@ lp_build_add(struct lp_build_context *bld,
>           return lp_build_intrinsic_binary(builder, intrinsic,
>           lp_build_vec_type(bld->gallivm, bld->type), a, b);
>     }
>  
> +   /* TODO: handle signed case */
> +   if(type.norm && !type.floating && !type.fixed && !type.sign)
> +      a = lp_build_min_simple(bld, a, lp_build_comp(bld, b));
> +
>     if(LLVMIsConstant(a) && LLVMIsConstant(b))
>        if (type.floating)
>           res = LLVMConstFAdd(a, b);
> @@ -663,6 +667,10 @@ lp_build_sub(struct lp_build_context *bld,
>           return lp_build_intrinsic_binary(builder, intrinsic,
>           lp_build_vec_type(bld->gallivm, bld->type), a, b);
>     }
>  
> +   /* TODO: handle signed case */
> +   if(type.norm && !type.floating && !type.fixed && !type.sign)
> +      a = lp_build_max_simple(bld, a, b);
> +
>     if(LLVMIsConstant(a) && LLVMIsConstant(b))
>        if (type.floating)
>           res = LLVMConstFSub(a, b);
> --
> 1.7.11.7
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list