From patchwork Tue Mar 19 14:55:50 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 2301601 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id F1AAD3FC8A for ; Tue, 19 Mar 2013 15:05:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DEB7BE652E for ; Tue, 19 Mar 2013 08:05:14 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [95.142.166.194]) by gabe.freedesktop.org (Postfix) with ESMTP id 5A1C9E610B for ; Tue, 19 Mar 2013 07:55:28 -0700 (PDT) Received: from avalon.ideasonboard.com (unknown [91.178.238.129]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id ADE3235AAF for ; Tue, 19 Mar 2013 15:55:11 +0100 (CET) From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Subject: [PATCH v4 09/21] modetest: Allow specifying plane position Date: Tue, 19 Mar 2013 15:55:50 +0100 Message-Id: <1363704962-14077-10-git-send-email-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 1.8.1.5 In-Reply-To: <1363704962-14077-1-git-send-email-laurent.pinchart@ideasonboard.com> References: <1363704962-14077-1-git-send-email-laurent.pinchart@ideasonboard.com> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Extend the -P option to allow specifying the plane x and y offsets. The position is optional, if not specified the plane will be positioned at the center of the screen as before. Signed-off-by: Laurent Pinchart --- tests/modetest/modetest.c | 72 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 7153a40..f95efe6 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -645,6 +645,7 @@ struct connector_arg { struct plane_arg { uint32_t con_id; /* the id of connector to bind to */ + uint32_t x, y; uint32_t w, h; unsigned int fb_id; char format_str[5]; /* need to leave room for terminating \0 */ @@ -855,11 +856,16 @@ set_plane(struct kms_driver *kms, struct connector_arg *c, struct plane_arg *p) return -1; } - /* ok, boring.. but for now put in middle of screen: */ - crtc_x = c->mode->hdisplay / 3; - crtc_y = c->mode->vdisplay / 3; - crtc_w = crtc_x; - crtc_h = crtc_y; + if (p->x == (uint32_t)-1 || p->y == (uint32_t)-1) { + /* Default to the middle of the screen */ + crtc_x = (c->mode->hdisplay - p->w) / 2; + crtc_y = (c->mode->vdisplay - p->h) / 2; + } else { + crtc_x = p->x; + crtc_y = p->y; + } + crtc_w = p->w; + crtc_h = p->h; /* note src coords (last 4 args) are in Q16 format */ if (drmModeSetPlane(fd, plane_id, c->crtc, p->fb_id, @@ -870,6 +876,8 @@ set_plane(struct kms_driver *kms, struct connector_arg *c, struct plane_arg *p) return -1; } + ovr->crtc_id = c->crtc; + return 0; } @@ -1063,18 +1071,52 @@ static int parse_connector(struct connector_arg *c, const char *arg) return 0; } -static int parse_plane(struct plane_arg *p, const char *arg) +static int parse_plane(struct plane_arg *plane, const char *p) { - strcpy(p->format_str, "XR24"); + char *end; + + plane->con_id = strtoul(p, &end, 10); + if (*end != ':') + return -EINVAL; + + p = end + 1; + if (*p == '(') { + plane->x = strtoul(p + 1, &end, 10); + if (*end != ',') + return -EINVAL; + p = end + 1; + plane->y = strtoul(p, &end, 10); + if (*end++ != ')') + return -EINVAL; + if (*end++ != '/') + return -EINVAL; + p = end; + } else { + plane->x = (uint32_t)-1; + plane->y = (uint32_t)-1; + } - if (sscanf(arg, "%d:%dx%d@%4s", &p->con_id, &p->w, &p->h, p->format_str) != 4 && - sscanf(arg, "%d:%dx%d", &p->con_id, &p->w, &p->h) != 3) - return -1; + plane->w = strtoul(p, &end, 10); + if (*end != 'x') + return -EINVAL; - p->fourcc = format_fourcc(p->format_str); - if (p->fourcc == 0) { - fprintf(stderr, "unknown format %s\n", p->format_str); - return -1; + p = end + 1; + plane->h = strtoul(p, &end, 10); + + if (*end == '@') { + p = end + 1; + if (strlen(p) != 4) + return -EINVAL; + + strcpy(plane->format_str, p); + } else { + strcpy(plane->format_str, "XR24"); + } + + plane->fourcc = format_fourcc(plane->format_str); + if (plane->fourcc == 0) { + fprintf(stderr, "unknown format %s\n", plane->format_str); + return -EINVAL; } return 0; @@ -1103,7 +1145,7 @@ static void usage(char *name) fprintf(stderr, "\t-p\tlist CRTCs and planes (pipes)\n"); fprintf(stderr, "\n Test options:\n\n"); - fprintf(stderr, "\t-P :x[@]\tset a plane\n"); + fprintf(stderr, "\t-P :[(x,y)/]x[@]\tset a plane\n"); fprintf(stderr, "\t-s [@]:[@]\tset a mode\n"); fprintf(stderr, "\t-v\ttest vsynced page flipping\n"); fprintf(stderr, "\t-w ::\tset property\n");