svga: allow 3D transfers in svga_texture_transfer_map()
authorBrian Paul <brianp@vmware.com>
Mon, 24 Jun 2013 22:15:02 +0000 (16:15 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 25 Jun 2013 23:54:24 +0000 (17:54 -0600)
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/drivers/svga/svga_resource_texture.c

index 49509303553665eef78462ccd2a0ec7e0b175421..4feca53df07cad4492956d1d24835d02abd2d07f 100644 (file)
@@ -258,7 +258,6 @@ svga_texture_transfer_map(struct pipe_context *pipe,
    if (usage & PIPE_TRANSFER_MAP_DIRECTLY)
       return NULL;
 
-   assert(box->depth == 1);
    st = CALLOC_STRUCT(svga_transfer);
    if (!st)
       return NULL;
@@ -268,19 +267,19 @@ svga_texture_transfer_map(struct pipe_context *pipe,
    st->base.usage = usage;
    st->base.box = *box;
    st->base.stride = nblocksx*util_format_get_blocksize(texture->format);
-   st->base.layer_stride = 0;
+   st->base.layer_stride = st->base.stride * nblocksy;
 
    st->hw_nblocksy = nblocksy;
 
    st->hwbuf = svga_winsys_buffer_create(svga,
                                          1, 
                                          0,
-                                         st->hw_nblocksy*st->base.stride);
+                                         st->hw_nblocksy * st->base.stride * box->depth);
    while(!st->hwbuf && (st->hw_nblocksy /= 2)) {
       st->hwbuf = svga_winsys_buffer_create(svga,
                                             1, 
                                             0,
-                                            st->hw_nblocksy*st->base.stride);
+                                            st->hw_nblocksy * st->base.stride * box->depth);
    }
 
    if(!st->hwbuf)