From patchwork Wed Apr 29 12:24:34 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tvrtko Ursulin X-Patchwork-Id: 6295751 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id A8E5BBEEE1 for ; Wed, 29 Apr 2015 12:24:42 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 97C3C20131 for ; Wed, 29 Apr 2015 12:24:41 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id ACF322012D for ; Wed, 29 Apr 2015 12:24:40 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F07C6E69A; Wed, 29 Apr 2015 05:24:40 -0700 (PDT) X-Original-To: Intel-gfx@lists.freedesktop.org Delivered-To: Intel-gfx@lists.freedesktop.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 0FF4E6E69A for ; Wed, 29 Apr 2015 05:24:38 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 29 Apr 2015 05:24:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,670,1422950400"; d="scan'208";a="487155433" Received: from tursulin-linux.isw.intel.com ([10.102.226.59]) by FMSMGA003.fm.intel.com with ESMTP; 29 Apr 2015 05:24:37 -0700 From: Tvrtko Ursulin To: Intel-gfx@lists.freedesktop.org Date: Wed, 29 Apr 2015 13:24:34 +0100 Message-Id: <1430310275-15075-1-git-send-email-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.3.5 Subject: [Intel-gfx] [PATCH i-g-t 1/2] igt_fb: Transfer existing content to Cairo surface for Y/Yf frame buffers X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,HK_RANDOM_FROM, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Tvrtko Ursulin Rendering into Y and Yf tiled frame buffers with Cairo was losing the previous content ie. was starting from black. This is different than the behaviour with linear and X tiled so make it the same by blitting the initial content when creating the rendering context. Signed-off-by: Tvrtko Ursulin Cc: Damien Lespiau --- lib/igt_fb.c | 56 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 6dc22bb..fe0c63f 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -650,11 +650,27 @@ struct fb_blit_upload { } linear; }; +static unsigned int fb_mod_to_obj_tiling(uint64_t fb_mod) +{ + switch (fb_mod) { + case LOCAL_DRM_FORMAT_MOD_NONE: + return I915_TILING_NONE; + case LOCAL_I915_FORMAT_MOD_X_TILED: + return I915_TILING_X; + case LOCAL_I915_FORMAT_MOD_Y_TILED: + return I915_TILING_Y; + case LOCAL_I915_FORMAT_MOD_Yf_TILED: + return I915_TILING_Yf; + default: + igt_assert(0); + } +} + static void destroy_cairo_surface__blit(void *arg) { struct fb_blit_upload *blit = arg; struct igt_fb *fb = blit->fb; - unsigned int obj_tiling = I915_TILING_NONE; + unsigned int obj_tiling = fb_mod_to_obj_tiling(fb->tiling); munmap(blit->linear.map, blit->linear.size); fb->cairo_surface = NULL; @@ -662,18 +678,6 @@ static void destroy_cairo_surface__blit(void *arg) gem_set_domain(blit->fd, blit->linear.handle, I915_GEM_DOMAIN_GTT, 0); - switch (fb->tiling) { - case LOCAL_I915_FORMAT_MOD_X_TILED: - obj_tiling = I915_TILING_X; - break; - case LOCAL_I915_FORMAT_MOD_Y_TILED: - obj_tiling = I915_TILING_Y; - break; - case LOCAL_I915_FORMAT_MOD_Yf_TILED: - obj_tiling = I915_TILING_Yf; - break; - } - igt_blitter_fast_copy__raw(blit->fd, blit->linear.handle, blit->linear.stride, @@ -695,6 +699,7 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb) { struct fb_blit_upload *blit; cairo_format_t cairo_format; + unsigned int obj_tiling = fb_mod_to_obj_tiling(fb->tiling); int bpp, ret; blit = malloc(sizeof(*blit)); @@ -716,6 +721,28 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb) blit->fd = fd; blit->fb = fb; + + /* Copy fb content to linear BO */ + gem_set_domain(fd, blit->linear.handle, + I915_GEM_DOMAIN_GTT, 0); + + igt_blitter_fast_copy__raw(fd, + fb->gem_handle, + fb->stride, + obj_tiling, + 0, 0, /* src_x, src_y */ + fb->width, fb->height, + blit->linear.handle, + blit->linear.stride, + I915_TILING_NONE, + 0, 0 /* dst_x, dst_y */); + + gem_sync(fd, blit->linear.handle); + + gem_set_domain(fd, blit->linear.handle, + I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU); + + /* Setup cairo context */ blit->linear.map = gem_mmap__cpu(fd, blit->linear.handle, 0, @@ -723,9 +750,6 @@ static void create_cairo_surface__blit(int fd, struct igt_fb *fb) PROT_READ | PROT_WRITE); igt_assert(blit->linear.map); - gem_set_domain(fd, blit->linear.handle, - I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU); - cairo_format = drm_format_to_cairo(fb->drm_format); fb->cairo_surface = cairo_image_surface_create_for_data(blit->linear.map,