r600g: fix source box in r600_resource_copy_region
authorVadim Girlin <vadimgirlin@gmail.com>
Fri, 17 Jun 2011 19:01:59 +0000 (23:01 +0400)
committerDave Airlie <airlied@redhat.com>
Sat, 18 Jun 2011 05:45:59 +0000 (15:45 +1000)
Source box needs to be adjusted for blitting from compressed formats.

fixes https://bugs.freedesktop.org/show_bug.cgi?id=35434

Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/r600_blit.c

index 043c8759f569397d8345c52c1e11e4bf55b0e3a9..e858ea212ea4a780fe551d2f37b661283e381c72 100644 (file)
@@ -294,6 +294,7 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
 {
        struct r600_resource_texture *rsrc = (struct r600_resource_texture*)src;
        struct texture_orig_info orig_info[2];
+       struct pipe_box sbox, *psbox;
        boolean restore_orig[2];
 
        /* Fallback for buffers. */
@@ -311,7 +312,15 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
        if (util_format_is_compressed(src->format)) {
                r600_compressed_to_blittable(src, src_level, &orig_info[0]);
                restore_orig[0] = TRUE;
-       }
+               sbox.x = util_format_get_nblocksx(orig_info[0].format, src_box->x);
+               sbox.y = util_format_get_nblocksy(orig_info[0].format, src_box->y);
+               sbox.z = src_box->z;
+               sbox.width = util_format_get_nblocksx(orig_info[0].format, src_box->width);
+               sbox.height = util_format_get_nblocksy(orig_info[0].format, src_box->height);
+               sbox.depth = src_box->depth;
+               psbox=&sbox;
+       } else
+               psbox=src_box;
 
        if (util_format_is_compressed(dst->format)) {
                r600_compressed_to_blittable(dst, dst_level, &orig_info[1]);
@@ -322,7 +331,7 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
        }
 
        r600_hw_copy_region(ctx, dst, dst_level, dstx, dsty, dstz,
-                           src, src_level, src_box);
+                           src, src_level, psbox);
 
        if (restore_orig[0])
                r600_reset_blittable_to_compressed(src, src_level, &orig_info[0]);