summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2018-07-18 20:11:52 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2018-09-27 23:16:47 +0300
commit6f5d6b06a90526b4a8de93398f3c2dd537b3b7ba (patch)
tree24d048e759e75e99b7fa592301a88ac5eea28f70
parent2238361afbfee71827e2ee6e71fc43f1a39dcefe (diff)
lib/igt_fb: Refactor blitter usage
Deduplicate the blitter code. Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
-rw-r--r--lib/igt_fb.c62
1 files changed, 29 insertions, 33 deletions
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 26019f04..cba67f41 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -1211,32 +1211,44 @@ struct fb_blit_upload {
struct fb_blit_linear linear;
};
+static void blitcopy(const struct igt_fb *dst_fb,
+ const struct igt_fb *src_fb)
+{
+ igt_assert_eq(dst_fb->fd, src_fb->fd);
+ igt_assert_eq(dst_fb->num_planes, src_fb->num_planes);
+
+ for (int i = 0; i < dst_fb->num_planes; i++) {
+ igt_assert_eq(dst_fb->plane_bpp[i], src_fb->plane_bpp[i]);
+ igt_assert_eq(dst_fb->plane_width[i], src_fb->plane_width[i]);
+ igt_assert_eq(dst_fb->plane_height[i], src_fb->plane_height[i]);
+
+ igt_blitter_fast_copy__raw(dst_fb->fd,
+ src_fb->gem_handle,
+ src_fb->offsets[i],
+ src_fb->strides[i],
+ igt_fb_mod_to_tiling(src_fb->tiling),
+ 0, 0, /* src_x, src_y */
+ dst_fb->plane_width[i], dst_fb->plane_height[i],
+ dst_fb->plane_bpp[i],
+ dst_fb->gem_handle,
+ dst_fb->offsets[i],
+ dst_fb->strides[i],
+ igt_fb_mod_to_tiling(dst_fb->tiling),
+ 0, 0 /* dst_x, dst_y */);
+ }
+}
+
static void free_linear_mapping(struct fb_blit_upload *blit)
{
int fd = blit->fd;
struct igt_fb *fb = blit->fb;
struct fb_blit_linear *linear = &blit->linear;
- unsigned int obj_tiling = igt_fb_mod_to_tiling(fb->tiling);
- int i;
gem_munmap(linear->map, linear->fb.size);
gem_set_domain(fd, linear->fb.gem_handle,
I915_GEM_DOMAIN_GTT, 0);
- for (i = 0; i < fb->num_planes; i++)
- igt_blitter_fast_copy__raw(fd,
- linear->fb.gem_handle,
- linear->fb.offsets[i],
- linear->fb.strides[i],
- I915_TILING_NONE,
- 0, 0, /* src_x, src_y */
- fb->plane_width[i], fb->plane_height[i],
- fb->plane_bpp[i],
- fb->gem_handle,
- fb->offsets[i],
- fb->strides[i],
- obj_tiling,
- 0, 0 /* dst_x, dst_y */);
+ blitcopy(fb, &linear->fb);
gem_sync(fd, linear->fb.gem_handle);
gem_close(fd, linear->fb.gem_handle);
@@ -1255,9 +1267,6 @@ static void destroy_cairo_surface__blit(void *arg)
static void setup_linear_mapping(int fd, struct igt_fb *fb, struct fb_blit_linear *linear)
{
- unsigned int obj_tiling = igt_fb_mod_to_tiling(fb->tiling);
- int i;
-
/*
* We create a linear BO that we'll map for the CPU to write to (using
* cairo). This linear bo will be then blitted to its final
@@ -1276,20 +1285,7 @@ static void setup_linear_mapping(int fd, struct igt_fb *fb, struct fb_blit_linea
gem_set_domain(fd, linear->fb.gem_handle,
I915_GEM_DOMAIN_GTT, 0);
- for (i = 0; i < fb->num_planes; i++)
- igt_blitter_fast_copy__raw(fd,
- fb->gem_handle,
- fb->offsets[i],
- fb->strides[i],
- obj_tiling,
- 0, 0, /* src_x, src_y */
- fb->plane_width[i], fb->plane_height[i],
- fb->plane_bpp[i],
- linear->fb.gem_handle,
- linear->fb.offsets[i],
- linear->fb.strides[i],
- I915_TILING_NONE,
- 0, 0 /* dst_x, dst_y */);
+ blitcopy(&linear->fb, fb);
gem_sync(fd, linear->fb.gem_handle);