diff options
author | Chia-I Wu <[email protected]> | 2013-06-17 14:17:10 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2013-06-17 18:28:58 +0800 |
commit | 98bc4c62a621fa1f8c099c45767d22e5d2bc9741 (patch) | |
tree | 888e8619e233bb9ccadde1d5668fdccaa33967eb /src/gallium/drivers/ilo | |
parent | ebfd7a61c0a4ca9395ef7a522cc491208e3f045f (diff) |
ilo: add pipe-based copy method to ilo_blitter
It enables accelerated resource_copy_region() when blt-based method fails.
Diffstat (limited to 'src/gallium/drivers/ilo')
-rw-r--r-- | src/gallium/drivers/ilo/ilo_blit.c | 9 | ||||
-rw-r--r-- | 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 |