vc4: Size transfer temporary mappings appropriately for full maps of 3D.
authorEric Anholt <eric@anholt.net>
Wed, 18 May 2016 19:29:02 +0000 (12:29 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 19 May 2016 00:30:07 +0000 (17:30 -0700)
We don't really support reading/writing of 3D textures since the hardware
doesn't do 3D, but we do need to make sure that a pipe_transfer for them
has enough space to store the image.  This was previously not a problem
because the state tracker only mapped a slice at a time until
fb9fe352ea41c7e3633ba2c483c59b73c529845b.  Fixes glean glsl1 tests, which
all have setup of a 3D texture at the start.

src/gallium/drivers/vc4/vc4_resource.c

index a360e192b3f40bcaad4b0ccbeb0a2dace2bcab54..20f137a8e17458be7d3fe14e4bbb27bb67b570e2 100644 (file)
@@ -294,9 +294,9 @@ vc4_resource_transfer_map(struct pipe_context *pctx,
                 ptrans->box.height = align(ptrans->box.height, utile_h);
 
                 ptrans->stride = ptrans->box.width * rsc->cpp;
-                ptrans->layer_stride = ptrans->stride;
+                ptrans->layer_stride = ptrans->stride * ptrans->box.height;
 
-                trans->map = malloc(ptrans->stride * ptrans->box.height);
+                trans->map = malloc(ptrans->layer_stride * ptrans->box.depth);
                 if (usage & PIPE_TRANSFER_READ ||
                     ptrans->box.width != orig_width ||
                     ptrans->box.height != orig_height) {