summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2012-07-18 00:32:50 +0200
committerMarek Olšák <[email protected]>2012-07-18 00:32:50 +0200
commit43e226b6efb77db2247741cc2057d9625a2cfa05 (patch)
tree10919986e1a18be0ff2f481a1fec204014592ee6
parentb242adbe5cfa165b252064a1ea36f802d8251ef1 (diff)
r600g: optimize uploading depth textures
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.
-rw-r--r--src/gallium/drivers/r600/r600_texture.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index 3a5a912f63f..4cf9cb832bd 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -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);
}
}