On Tue, Feb 10, 2015 at 7:40 AM, Eduardo Lima Mitev <el...@igalia.com> wrote:
> From: Samuel Iglesias Gonsalvez <sigles...@igalia.com>
>
> Round floating point values to nearest integer to avoid "off by one texel"
> kind of errors when blitting.
>
> Fixes:
>
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_nearest
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_linear
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_src_y_nearest
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_src_y_linear
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_dst_y_nearest
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_dst_y_linear
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_src_dst_x_nearest
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_src_dst_x_linear
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_src_dst_y_nearest
> dEQP-GLES3.functional.fbo.blit.rect.out_of_bounds_reverse_src_dst_y_linear
>
> No piglit regressions.
>
> Signed-off-by: Samuel Iglesias Gonsalvez <sigles...@igalia.com>
> ---
>  src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp 
> b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> index 10a53dc..469baf7 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> @@ -1994,10 +1994,13 @@ brw_blorp_blit_params::brw_blorp_blit_params(struct 
> brw_context *brw,
>
>     wm_prog_key.src_tiled_w = src.map_stencil_as_y_tiled;
>     wm_prog_key.dst_tiled_w = dst.map_stencil_as_y_tiled;
> -   x0 = wm_push_consts.dst_x0 = dst_x0;
> -   y0 = wm_push_consts.dst_y0 = dst_y0;
> -   x1 = wm_push_consts.dst_x1 = dst_x1;
> -   y1 = wm_push_consts.dst_y1 = dst_y1;
> +   /* Round floating point values to nearest integer to avoid "off by one 
> texel"
> +    * kind of errors when blitting.
> +    */
> +   x0 = wm_push_consts.dst_x0 = dst_x0 + 0.5;
> +   y0 = wm_push_consts.dst_y0 = dst_y0 + 0.5;
> +   x1 = wm_push_consts.dst_x1 = dst_x1 + 0.5;
> +   y1 = wm_push_consts.dst_y1 = dst_y1 + 0.5;

Can we use round(dst_??) here instead?

x + 0.5 has the surprising property that nextafter(0.5, 0.0) (i.e.,
the largest value less than 0.5) + 0.5 is exactly half way between the
largest value less than 1.0 and 1.0, so it gets rounded to 1.0 instead
of down to 0.0. It's an uncommon case, but round() should better
describe what we want to do anyway.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to