From patchwork Wed Aug 20 10:54:09 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Wood X-Patchwork-Id: 4748961 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.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 122A2C0338 for ; Wed, 20 Aug 2014 10:54:19 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1ECC52015A for ; Wed, 20 Aug 2014 10:54:18 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id D536820170 for ; Wed, 20 Aug 2014 10:54:16 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A31B6E137; Wed, 20 Aug 2014 03:54:16 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-we0-f181.google.com (mail-we0-f181.google.com [74.125.82.181]) by gabe.freedesktop.org (Postfix) with ESMTP id 3020D6E137 for ; Wed, 20 Aug 2014 03:54:15 -0700 (PDT) Received: by mail-we0-f181.google.com with SMTP id k48so7731375wev.40 for ; Wed, 20 Aug 2014 03:54:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-type:content-transfer-encoding; bh=K3lAaXxeaOAcah3OiZDxsacSQwt21PG/YFD6BCZataA=; b=YkbrqSKRvAgaR9Ph0l5iSwxOm7HevhtbKJYTcyqZL4iBQ4lnp0OVn3thoUaBm4EJTh FAyL6pXPORyheqf86squfyTyQLq5vPHOBFdSC38GTTwEMxYo38KqDwTvhESpX7HTBt+l M5aIhfxCgst67VOJN6Per9EhgCGWPtHnOLYsURRt+pM9HrDdtAOV+AR/3cGPiNEeAA0U lZAkNHAL9R57Zfr6LvED1exy2potsJ9TPiNGrIXS5bWUkAbAwnfb8tVwWQTQCQnuWI3e P8Chr12+aaJmEGDgAQpCd7bUeHKUPWbpNgPJM5tFzSoJKheUU+UPNwlIKuPw76l9GCPk 5zKg== X-Gm-Message-State: ALoCoQmA60+Y8ALYyRV0camHI5WPSpO17fU44vndAjn/GdkkCYWyXpkaU5gf/DQ3jk2sLlk4TND8 X-Received: by 10.180.106.6 with SMTP id gq6mr14357374wib.5.1408532054321; Wed, 20 Aug 2014 03:54:14 -0700 (PDT) Received: from pistachio.icx.intel.com ([83.217.123.106]) by mx.google.com with ESMTPSA id fa10sm1101615wjd.42.2014.08.20.03.54.13 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Aug 2014 03:54:13 -0700 (PDT) From: Thomas Wood To: intel-gfx@lists.freedesktop.org Date: Wed, 20 Aug 2014 11:54:09 +0100 Message-Id: <1408532049-9215-3-git-send-email-thomas.wood@intel.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1408532049-9215-1-git-send-email-thomas.wood@intel.com> References: <1408532049-9215-1-git-send-email-thomas.wood@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t 3/3] tests: add kms_3d test X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Spam-Status: No, score=-4.9 required=5.0 tests=BAYES_00, 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 Add a test to verify creation and use of 3D stereo modes. Signed-off-by: Thomas Wood --- lib/igt_fb.c | 4 +- tests/.gitignore | 1 + tests/Android.mk | 1 + tests/Makefile.sources | 1 + tests/kms_3d.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 tests/kms_3d.c diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 9a13969..0096836 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -614,10 +614,10 @@ unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode) enable_tiling, &fb); cr = igt_get_cairo_ctx(drm_fd, &fb); - igt_paint_image(cr, IGT_DATADIR"1080p-left.png", + igt_paint_image(cr, IGT_DATADIR"/1080p-left.png", layout.left.x, layout.left.y, layout.left.width, layout.left.height); - igt_paint_image(cr, IGT_DATADIR"1080p-right.png", + igt_paint_image(cr, IGT_DATADIR"/1080p-right.png", layout.right.x, layout.right.y, layout.right.width, layout.right.height); diff --git a/tests/.gitignore b/tests/.gitignore index 3da061e..9b5cf7d 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -116,6 +116,7 @@ igt_no_exit igt_no_exit_list_only igt_no_subtest igt_simulation +kms_3d kms_addfb kms_cursor_crc kms_fbc_crc diff --git a/tests/Android.mk b/tests/Android.mk index 3644aa1..f28b400 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -55,6 +55,7 @@ ifeq ("${ANDROID_HAS_CAIRO}", "1") else # the following tests depend on cairo, so skip them skip_tests_list += \ + kms_3d \ kms_plane \ kms_addfb \ kms_cursor_crc \ diff --git a/tests/Makefile.sources b/tests/Makefile.sources index 698e290..078df57 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -141,6 +141,7 @@ TESTS_progs = \ gen3_render_tiledx_blits \ gen3_render_tiledy_blits \ gen7_forcewake_mt \ + kms_3d \ kms_force_connector \ kms_sink_crc_basic \ kms_fence_pin_leak \ diff --git a/tests/kms_3d.c b/tests/kms_3d.c new file mode 100644 index 0000000..c593f34 --- /dev/null +++ b/tests/kms_3d.c @@ -0,0 +1,118 @@ +/* + * Copyright © 2014 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#include "igt_core.h" +#include "igt_kms.h" +#include "drmtest.h" +#include "igt_edid.h" + +igt_simple_main +{ + int drm_fd; + drmModeRes *res; + drmModeConnector *connector; + unsigned char *edid; + size_t length; + int mode_count, connector_id; + + drm_fd = drm_open_any(); + res = drmModeGetResources(drm_fd); + + igt_assert(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_STEREO_3D, 1) >= 0); + + /* find an hdmi connector */ + for (int i = 0; i < res->count_connectors; i++) { + + connector = drmModeGetConnector(drm_fd, res->connectors[i]); + + if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA && + connector->connection == DRM_MODE_DISCONNECTED) + break; + + drmModeFreeConnector(connector); + + connector = NULL; + } + igt_require(connector); + + kmstest_edid_add_3d(generic_edid[EDID_FHD], EDID_LENGTH, &edid, + &length); + + kmstest_force_edid(drm_fd, connector, edid, length); + kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON); + + connector_id = connector->connector_id; + + /* check for 3D modes */ + mode_count = 0; + connector = drmModeGetConnector(drm_fd, connector_id); + for (int i = 0; i < connector->count_modes; i++) { + if (connector->modes[i].flags & DRM_MODE_FLAG_3D_MASK) + mode_count++; + } + + igt_assert(mode_count == 13); + + /* set 3D modes */ + igt_info("Testing:\n"); + for (int i = 0; i < connector->count_modes; i++) { + int fb_id; + struct kmstest_connector_config config; + int crtc_mask = -1; + int ret; + + if (!(connector->modes[i].flags & DRM_MODE_FLAG_3D_MASK)) + continue; + + /* create a configuration */ + ret = kmstest_get_connector_config(drm_fd, connector_id, + crtc_mask, &config); + if (ret != true) { + igt_info("Error creating configuration for:\n "); + kmstest_dump_mode(&connector->modes[i]); + + continue; + } + + igt_info(" "); + kmstest_dump_mode(&connector->modes[i]); + + /* create stereo framebuffer */ + fb_id = igt_create_stereo_fb(drm_fd, &connector->modes[i]); + + ret = drmModeSetCrtc(drm_fd, config.crtc->crtc_id, fb_id, 0, 0, + &connector->connector_id, 1, + &connector->modes[i]); + + igt_assert(ret == 0); + } + + kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_UNSPECIFIED); + kmstest_force_edid(drm_fd, connector, NULL, 0); + + drmModeFreeConnector(connector); + free(edid); + + igt_exit(); +}