On Tue, Feb 10, 2015 at 7:40 AM, Eduardo Lima Mitev <[email protected]> wrote:
> From: Samuel Iglesias Gonsalvez <[email protected]>
>
> 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 <[email protected]>
> ---
>  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
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to