Gallium: fix for conform test
authorRobert Ellison <papillo@tungstengraphics.com>
Thu, 18 Dec 2008 16:46:53 +0000 (09:46 -0700)
committerRobert Ellison <papillo@tungstengraphics.com>
Thu, 18 Dec 2008 17:22:33 +0000 (10:22 -0700)
commit5ccef84c018c5e99bf4b8cffb5ba1bb66bf40cc4
tree6b7cdf73355c32fff2163e62d6a1889c9e5e6568
parent2389c055ed4c26ba5f3979c4a7871a333725dd88
Gallium: fix for conform test

The following construction in util_surface_copy() in
gallium/auxiliary/util/u_rect.c, introduced in commit
d177c9ddda2c452cf7d6696d89cf4458ef986f98, incorrectly inverts
the Y coordinate in the last parameter to pipe_copy_rect().

      /* If do_flip, invert src_y position and pass negative src stride
*/
      pipe_copy_rect(dst_map,
                     &dst->block,
                     dst->stride,
                     dst_x, dst_y,
                     w, h,
                     src_map,
                     do_flip ? -(int) src->stride : src->stride,
                     src_x,
                     do_flip ? w - src_y : src_y);

The intention is to start at the last Y coordinate line and move
backwards, in the case of a flip; in that case, the correct
calculation is "src_y + h - 1", not "w - src_y".

This fixes a Gallium assertion failure in the conformance tests:

      u_rect.c:65:pipe_copy_rect: Assertion `src_y >= 0' failed.
      debug_get_bool_option: GALLIUM_ABORT_ON_ASSERT = TRUE
      Trace/breakpoint trap
src/gallium/auxiliary/util/u_rect.c