r600g: flush depth texture before a blit from it.
authorDave Airlie <airlied@redhat.com>
Thu, 3 Feb 2011 04:45:40 +0000 (14:45 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 3 Feb 2011 23:09:44 +0000 (09:09 +1000)
If we are going to blit from a depth texture we need to flush
it before we blit from it.

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

index bf21ab432ef10dd5d046be62c5ef5bf11bfd6a47..c11268ccca3b8453b6c2598a0305a14e683d61b9 100644 (file)
@@ -208,8 +208,14 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
                                      unsigned src_level,
                                      const struct pipe_box *src_box)
 {
+       struct r600_resource_texture *rsrc = (struct r600_resource_texture*)src;
+
+       if (rsrc->depth && !rsrc->is_flushing_texture)
+               r600_texture_depth_flush(ctx, src);
+
        r600_hw_copy_region(ctx, dst, dst_level, dstx, dsty, dstz,
                            src, src_level, src_box);
+
 }
 
 void r600_init_blit_functions(struct r600_pipe_context *rctx)