From 98bc4c62a621fa1f8c099c45767d22e5d2bc9741 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 17 Jun 2013 14:17:10 +0800 Subject: [PATCH] ilo: add pipe-based copy method to ilo_blitter It enables accelerated resource_copy_region() when blt-based method fails. --- src/gallium/drivers/ilo/ilo_blit.c | 9 +++++---- src/gallium/drivers/ilo/ilo_blitter_pipe.c | 21 ++++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/ilo/ilo_blit.c b/src/gallium/drivers/ilo/ilo_blit.c index 0041cd10916..ff8e5869658 100644 --- a/src/gallium/drivers/ilo/ilo_blit.c +++ b/src/gallium/drivers/ilo/ilo_blit.c @@ -26,13 +26,9 @@ */ #include "util/u_surface.h" -#include "intel_reg.h" #include "ilo_blitter.h" #include "ilo_context.h" -#include "ilo_cp.h" -#include "ilo_resource.h" -#include "ilo_screen.h" #include "ilo_blit.h" static void @@ -51,6 +47,11 @@ ilo_resource_copy_region(struct pipe_context *pipe, src, src_level, src_box)) return; + if (ilo_blitter_pipe_copy_resource(ilo->blitter, + dst, dst_level, dstx, dsty, dstz, + src, src_level, src_box)) + return; + util_resource_copy_region(&ilo->base, dst, dst_level, dstx, dsty, dstz, src, src_level, src_box); } diff --git a/src/gallium/drivers/ilo/ilo_blitter_pipe.c b/src/gallium/drivers/ilo/ilo_blitter_pipe.c index cfec8b10e5f..e37231ac00b 100644 --- a/src/gallium/drivers/ilo/ilo_blitter_pipe.c +++ b/src/gallium/drivers/ilo/ilo_blitter_pipe.c @@ -139,7 +139,26 @@ ilo_blitter_pipe_copy_resource(struct ilo_blitter *blitter, struct pipe_resource *src, unsigned src_level, const struct pipe_box *src_box) { - return false; + const unsigned mask = PIPE_MASK_RGBAZS; + const bool copy_all_samples = true; + + /* not until we allow rendertargets to be buffers */ + if (dst->target == PIPE_BUFFER || src->target == PIPE_BUFFER) + return false; + + if (!util_blitter_is_copy_supported(blitter->pipe_blitter, dst, src, mask)) + return false; + + ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_COPY); + + util_blitter_copy_texture(blitter->pipe_blitter, + dst, dst_level, dst_x, dst_y, dst_z, + src, src_level, src_box, + mask, copy_all_samples); + + ilo_blitter_pipe_end(blitter); + + return true; } bool