From patchwork Tue Apr 19 14:20:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ap, Kamal" X-Patchwork-Id: 8878781 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 96BE6BF29F for ; Tue, 19 Apr 2016 10:38:12 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id AD78C20225 for ; Tue, 19 Apr 2016 10:38:11 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 52458201BC for ; Tue, 19 Apr 2016 10:38:09 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C666B6E71D; Tue, 19 Apr 2016 10:38:07 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 925726E71D for ; Tue, 19 Apr 2016 10:38:06 +0000 (UTC) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP; 19 Apr 2016 03:38:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,506,1455004800"; d="scan'208";a="787832741" Received: from kraj-gsdv-lab.iind.intel.com ([10.223.161.126]) by orsmga003.jf.intel.com with ESMTP; 19 Apr 2016 03:38:04 -0700 From: "Ap, Kamal" To: intel-gfx@lists.freedesktop.org Date: Tue, 19 Apr 2016 19:50:59 +0530 Message-Id: <1461075659-14999-1-git-send-email-kamal.ap@intel.com> X-Mailer: git-send-email 1.9.1 Cc: "Ap, Kamal" Subject: [Intel-gfx] [PATCH] tools/intel_framebuffer_dump : dump FB attached to all enabled planes 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=-2.2 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_03_06, RCVD_IN_DNSWL_MED, 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 Signed-off-by: Ap, Kamal --- tools/intel_framebuffer_dump.c | 45 +++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/tools/intel_framebuffer_dump.c b/tools/intel_framebuffer_dump.c index 624a961..8fb311f 100644 --- a/tools/intel_framebuffer_dump.c +++ b/tools/intel_framebuffer_dump.c @@ -41,28 +41,42 @@ int main(int argc, char **argv) { drmModeResPtr res; - int fd, n; + drmModePlaneRes *plane_resources; + drmModePlane *ovr; + + int fd, i; + + fd = drm_open_driver(DRIVER_INTEL); - fd = drmOpen("i915", NULL); if (fd < 0) return ENOENT; + drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); + res = drmModeGetResources(fd); + if (res == NULL) return ENOMEM; - for (n = 0; n < res->count_crtcs; n++) { - struct drm_gem_open open_arg; - struct drm_gem_flink flink; - drmModeCrtcPtr crtc; + plane_resources = drmModeGetPlaneResources(fd); + + if (!plane_resources) { + return 0; + } + + for (i = 0; i < plane_resources->count_planes; i++) { drmModeFBPtr fb; + struct drm_gem_flink flink; + struct drm_gem_open open_arg; - crtc = drmModeGetCrtc(fd, res->crtcs[n]); - if (crtc == NULL) + ovr = drmModeGetPlane(fd, plane_resources->planes[i]); + if (!ovr) { + printf("GetPlane failed: %s\n", + strerror(errno)); continue; + } - fb = drmModeGetFB(fd, crtc->buffer_id); - drmModeFreeCrtc(crtc); + fb = drmModeGetFB(fd, ovr->fb_id); if (fb == NULL) continue; @@ -73,18 +87,21 @@ int main(int argc, char **argv) } open_arg.name = flink.name; + if (drmIoctl(fd, DRM_IOCTL_GEM_OPEN, &open_arg) == 0) { struct drm_i915_gem_mmap_gtt mmap_arg; void *ptr; - mmap_arg.handle = open_arg.handle; + mmap_arg.handle = open_arg.handle; if (drmIoctl(fd, DRM_IOCTL_I915_GEM_MMAP_GTT, &mmap_arg) == 0 && (ptr = mmap(0, open_arg.size, PROT_READ, MAP_SHARED, fd, mmap_arg.offset)) != (void *)-1) { cairo_surface_t *surface; cairo_format_t format; char name[80]; - snprintf(name, sizeof(name), "fb-%d.png", fb->fb_id); + snprintf(name, sizeof(name), + "p-%d_w-%d_h-%d_fb-%d.png", ovr->plane_id, + fb->width, fb->height, fb->fb_id); switch (fb->depth) { case 16: format = CAIRO_FORMAT_RGB16_565; break; @@ -98,14 +115,14 @@ int main(int argc, char **argv) fb->width, fb->height, fb->pitch); cairo_surface_write_to_png(surface, name); cairo_surface_destroy(surface); - munmap(ptr, open_arg.size); } drmIoctl(fd, DRM_IOCTL_GEM_CLOSE, &open_arg.handle); } drmModeFreeFB(fb); + drmModeFreePlane(ovr); } - + drmClose(fd); return 0; }