r600g: optimize uploading depth textures
authorMarek Olšák <maraeo@gmail.com>
Tue, 17 Jul 2012 22:32:50 +0000 (00:32 +0200)
committerMarek Olšák <maraeo@gmail.com>
Tue, 17 Jul 2012 22:32:50 +0000 (00:32 +0200)
Make it only copy the portion of a depth texture being uploaded and
not the whole 2D layer.

There is also a little code cleanup.

src/gallium/drivers/r600/r600_texture.c

index 3a5a912f63fbb540ec1bad20506f6b1d42d4c5f4..4cf9cb832bdda5bd7bf75d4257fa335d459a52eb 100644 (file)
@@ -906,19 +906,13 @@ void r600_texture_transfer_destroy(struct pipe_context *ctx,
        struct pipe_resource *texture = transfer->resource;
        struct r600_resource_texture *rtex = (struct r600_resource_texture*)texture;
 
-       if (rtex->is_depth) {
-               if ((transfer->usage & PIPE_TRANSFER_WRITE) && rtransfer->staging) {
-                       struct pipe_box sbox;
-
-                       u_box_origin_2d(texture->width0, texture->height0, &sbox);
-
+       if ((transfer->usage & PIPE_TRANSFER_WRITE) && rtransfer->staging) {
+               if (rtex->is_depth) {
                        ctx->resource_copy_region(ctx, texture, transfer->level,
-                                                 0, 0, transfer->box.z,
+                                                 transfer->box.x, transfer->box.y, transfer->box.z,
                                                  &rtransfer->staging->b.b, transfer->level,
-                                                 &sbox);
-               }
-       } else if (rtransfer->staging) {
-               if (transfer->usage & PIPE_TRANSFER_WRITE) {
+                                                 &transfer->box);
+               } else {
                        r600_copy_from_staging_texture(ctx, rtransfer);
                }
        }