[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