Mesa (master): r600g: use blitter for hw copy region
Dave Airlie
airlied at kemper.freedesktop.org
Wed Oct 13 05:57:30 UTC 2010
Module: Mesa
Branch: master
Commit: 88c1b32c62427c24ea276f20ac5ef260385a98d4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=88c1b32c62427c24ea276f20ac5ef260385a98d4
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Oct 13 11:17:44 2010 +1000
r600g: use blitter for hw copy region
at the moment depth copies are failing (piglit depth-level-clamp)
so use the fallback for now until get some time to investigate.
---
src/gallium/drivers/r600/r600_blit.c | 33 +++++++++++++++++++++++++++++++--
1 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c
index aecc87f..cae05aa 100644
--- a/src/gallium/drivers/r600/r600_blit.c
+++ b/src/gallium/drivers/r600/r600_blit.c
@@ -22,6 +22,7 @@
*/
#include <util/u_surface.h>
#include <util/u_blitter.h>
+#include <util/u_format.h>
#include "r600_pipe.h"
enum r600_blitter_op /* bitmask */
@@ -163,6 +164,26 @@ static void r600_clear_depth_stencil(struct pipe_context *ctx,
}
+
+/* Copy a block of pixels from one surface to another using HW. */
+static void r600_hw_copy_region(struct pipe_context *ctx,
+ struct pipe_resource *dst,
+ struct pipe_subresource subdst,
+ unsigned dstx, unsigned dsty, unsigned dstz,
+ struct pipe_resource *src,
+ struct pipe_subresource subsrc,
+ unsigned srcx, unsigned srcy, unsigned srcz,
+ unsigned width, unsigned height)
+{
+ struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+ r600_blitter_begin(ctx, R600_COPY);
+ util_blitter_copy_region(rctx->blitter, dst, subdst, dstx, dsty, dstz,
+ src, subsrc, srcx, srcy, srcz, width, height,
+ TRUE);
+ r600_blitter_end(ctx);
+}
+
static void r600_resource_copy_region(struct pipe_context *ctx,
struct pipe_resource *dst,
struct pipe_subresource subdst,
@@ -172,8 +193,16 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
unsigned srcx, unsigned srcy, unsigned srcz,
unsigned width, unsigned height)
{
- util_resource_copy_region(ctx, dst, subdst, dstx, dsty, dstz,
- src, subsrc, srcx, srcy, srcz, width, height);
+ boolean is_depth;
+ /* there is something wrong with depth resource copies at the moment so avoid them for now */
+ is_depth = util_format_get_component_bits(src->format, UTIL_FORMAT_COLORSPACE_ZS, 0) != 0;
+ if (is_depth)
+ util_resource_copy_region(ctx, dst, subdst, dstx, dsty, dstz,
+ src, subsrc, srcx, srcy, srcz, width, height);
+ else
+ r600_hw_copy_region(ctx, dst, subdst, dstx, dsty, dstz,
+ src, subsrc, srcx, srcy, srcz, width, height);
+
}
void r600_init_blit_functions(struct r600_pipe_context *rctx)
More information about the mesa-commit
mailing list