gallium/u_transfer_helper: Fix MSAA mappings with nonzero x/y.
authorEric Anholt <eric@anholt.net>
Mon, 9 Jul 2018 21:09:07 +0000 (14:09 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 12 Jul 2018 18:31:00 +0000 (11:31 -0700)
We created a temporary with box->{width,height} and then tried to map
width,height from a nonzero offset when we meant to just map the whole
temporary.

Fixes segfaults in V3D in dEQP-GLES3.functional.prerequisite.read_pixels
with --deqp-egl-config-name=rgba8888d24s8ms4 and also piglit's read-front
clear-front-first -samples=4

Reviewed-by: Rob Clark <robdclark@gmail.com>
src/gallium/auxiliary/util/u_transfer_helper.c

index 3b085fd..fd8a5c3 100644 (file)
@@ -207,7 +207,11 @@ transfer_map_msaa(struct pipe_context *pctx,
       pctx->blit(pctx, &blit);
    }
 
-   void *ss_map = pctx->transfer_map(pctx, trans->ss, 0, usage, box,
+   struct pipe_box map_box = *box;
+   map_box.x = 0;
+   map_box.y = 0;
+
+   void *ss_map = pctx->transfer_map(pctx, trans->ss, 0, usage, &map_box,
          &trans->trans);
    if (!ss_map) {
       free(trans);