* [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d
@ 2014-08-20 10:54 Thomas Wood
2014-08-20 10:54 ` [PATCH i-g-t 2/3] lib: move create_stereo_fb from testdisplay to igt_fb Thomas Wood
` (3 more replies)
0 siblings, 4 replies; 15+ messages in thread
From: Thomas Wood @ 2014-08-20 10:54 UTC (permalink / raw)
To: intel-gfx
kmstest_edid_add_3d adds an EDID extension block with 3D support to a
copy of the specified EDID.
Signed-off-by: Thomas Wood <thomas.wood@intel.com>
---
lib/igt_kms.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
lib/igt_kms.h | 1 +
2 files changed, 81 insertions(+)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index a414d96..eb898f8 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -657,6 +657,86 @@ kmstest_get_property(int drm_fd, uint32_t object_id, uint32_t object_type,
}
/**
+ * kmstest_edid_add_3d:
+ * @edid: an existing valid edid block
+ * @length: length of @edid
+ * @new_edid_ptr: pointer to where the new edid will be placed
+ * @new_length: pointer to the size of the new edid
+ *
+ * Makes a copy of an existing edid block and adds an extension indicating
+ * stereo 3D capabilities.
+ */
+void kmstest_edid_add_3d(const unsigned char *edid, size_t length,
+ unsigned char *new_edid_ptr[], size_t *new_length)
+{
+ unsigned char *new_edid;
+ int n_extensions;
+ char sum = 0;
+ int pos;
+ int i;
+ char cea_header_len = 4, video_block_len = 6, vsdb_block_len = 11;
+
+ igt_assert(new_edid_ptr != NULL && new_length != NULL);
+
+ *new_length = length + 128;
+
+ new_edid = calloc(*new_length, sizeof(char));
+ memcpy(new_edid, edid, length);
+ *new_edid_ptr = new_edid;
+
+ n_extensions = new_edid[126];
+ n_extensions++;
+ new_edid[126] = n_extensions;
+
+ /* recompute checksum */
+ for (i = 0; i < 127; i++) {
+ sum = sum + new_edid[i];
+ }
+ new_edid[127] = 256 - sum;
+
+ /* add a cea-861 extension block */
+ pos = length;
+ new_edid[pos++] = 0x2;
+ new_edid[pos++] = 0x3;
+ new_edid[pos++] = cea_header_len + video_block_len + vsdb_block_len;
+ new_edid[pos++] = 0x0;
+
+ /* video block (id | length) */
+ new_edid[pos++] = 2 << 5 | (video_block_len - 1);
+ new_edid[pos++] = 32 | 0x80; /* 1080p @ 24Hz | (native)*/
+ new_edid[pos++] = 5; /* 1080i @ 60Hz */
+ new_edid[pos++] = 20; /* 1080i @ 50Hz */
+ new_edid[pos++] = 4; /* 720p @ 60Hz*/
+ new_edid[pos++] = 19; /* 720p @ 50Hz*/
+
+ /* vsdb block ( id | length ) */
+ new_edid[pos++] = 3 << 5 | (vsdb_block_len - 1);
+ /* registration id */
+ new_edid[pos++] = 0x3;
+ new_edid[pos++] = 0xc;
+ new_edid[pos++] = 0x0;
+ /* source physical address */
+ new_edid[pos++] = 0x0;
+ new_edid[pos++] = 0x0;
+ /* Supports_AI ... etc */
+ new_edid[pos++] = 0x00;
+ /* Max TMDS Clock */
+ new_edid[pos++] = 0x00;
+ /* Latency present, HDMI Video Present */
+ new_edid[pos++] = 0x20;
+ /* HDMI Video */
+ new_edid[pos++] = 0x80;
+ new_edid[pos++] = 0x00;
+
+ /* checksum */
+ sum = 0;
+ for (i = 0; i < 127; i++) {
+ sum = sum + new_edid[length + i];
+ }
+ new_edid[length + 127] = 256 - sum;
+}
+
+/**
* kmstest_unset_all_crtcs:
* @drm_fd: the DRM fd
* @resources: libdrm resources pointer
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 4263a01..921afef 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -149,6 +149,7 @@ enum kmstest_generic_edid {
bool kmstest_force_connector(int fd, drmModeConnector *connector,
enum kmstest_force_connector_state state);
+void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
const unsigned char *edid, size_t length);
--
1.9.3
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH i-g-t 2/3] lib: move create_stereo_fb from testdisplay to igt_fb 2014-08-20 10:54 [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Thomas Wood @ 2014-08-20 10:54 ` Thomas Wood 2014-08-20 10:54 ` [PATCH i-g-t 3/3] tests: add kms_3d test Thomas Wood ` (2 subsequent siblings) 3 siblings, 0 replies; 15+ messages in thread From: Thomas Wood @ 2014-08-20 10:54 UTC (permalink / raw) To: intel-gfx Move create_stereo_fb from testdisplay to igt_create_stereo_fb in igt_fb so that it can be used in other tests. Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- lib/Makefile.am | 4 +- lib/igt_fb.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_fb.h | 2 + lib/igt_kms.h | 1 + tests/testdisplay.c | 116 +--------------------------------------------- 5 files changed, 138 insertions(+), 116 deletions(-) diff --git a/lib/Makefile.am b/lib/Makefile.am index 001ecab..36cf2d3 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -7,7 +7,9 @@ noinst_LTLIBRARIES = libintel_tools.la noinst_HEADERS = check-ndebug.h AM_CPPFLAGS = -I$(top_srcdir) -AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) +AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) \ + -DIGT_DATADIR=\""$(abs_top_srcdir)/tests"\" + LDADD = $(CAIRO_LIBS) AM_CFLAGS += $(CAIRO_CFLAGS) diff --git a/lib/igt_fb.c b/lib/igt_fb.c index d07af0d..9a13969 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -507,6 +507,137 @@ unsigned int igt_create_color_fb(int fd, int width, int height, return fb_id; } + +struct box { + int x, y, width, height; +}; + +struct stereo_fb_layout { + int fb_width, fb_height; + struct box left, right; +}; + +static void box_init(struct box *box, int x, int y, int bwidth, int bheight) +{ + box->x = x; + box->y = y; + box->width = bwidth; + box->height = bheight; +} + + +static void stereo_fb_layout_from_mode(struct stereo_fb_layout *layout, + drmModeModeInfo *mode) +{ + unsigned int format = mode->flags & DRM_MODE_FLAG_3D_MASK; + const int hdisplay = mode->hdisplay, vdisplay = mode->vdisplay; + int middle; + + switch (format) { + case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: + layout->fb_width = hdisplay; + layout->fb_height = vdisplay; + + middle = vdisplay / 2; + box_init(&layout->left, 0, 0, hdisplay, middle); + box_init(&layout->right, + 0, middle, hdisplay, vdisplay - middle); + break; + case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: + layout->fb_width = hdisplay; + layout->fb_height = vdisplay; + + middle = hdisplay / 2; + box_init(&layout->left, 0, 0, middle, vdisplay); + box_init(&layout->right, + middle, 0, hdisplay - middle, vdisplay); + break; + case DRM_MODE_FLAG_3D_FRAME_PACKING: + { + int vactive_space = mode->vtotal - vdisplay; + + layout->fb_width = hdisplay; + layout->fb_height = 2 * vdisplay + vactive_space; + + box_init(&layout->left, + 0, 0, hdisplay, vdisplay); + box_init(&layout->right, + 0, vdisplay + vactive_space, hdisplay, vdisplay); + break; + } + default: + igt_assert(0); + } +} +static const char *stereo_mode_str(drmModeModeInfo *mode) +{ + unsigned int layout = mode->flags & DRM_MODE_FLAG_3D_MASK; + + switch (layout) { + case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: + return "TB"; + case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: + return "SbSH"; + case DRM_MODE_FLAG_3D_FRAME_PACKING: + return "FP"; + default: + igt_assert(0); + } +} + +/** + * igt_create_stereo_fb: + * @drm_fd: open i915 drm file descriptor + * @mode: A stero 3D mode. + * + * Create a framebuffer for use with the stereo 3D mode specified by @mode. + * + * Returns: + * The kms id of the created framebuffer on success or a negative error code on + * failure. + */ +unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode) +{ + struct stereo_fb_layout layout; + cairo_t *cr; + uint32_t fb_id; + struct igt_fb fb; + + /* config */ + int bpp = 32; + int depth = 32; + bool enable_tiling = false; + + stereo_fb_layout_from_mode(&layout, mode); + fb_id = igt_create_fb(drm_fd, layout.fb_width, layout.fb_height, + igt_bpp_depth_to_drm_format(bpp, depth), + enable_tiling, &fb); + cr = igt_get_cairo_ctx(drm_fd, &fb); + + 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", + layout.right.x, layout.right.y, + layout.right.width, layout.right.height); + + cairo_destroy(cr); + + { + char buffer[64]; + + snprintf(buffer, sizeof(buffer), "%dx%d@%dHz-%s.png", + mode->hdisplay, + mode->vdisplay, + mode->vrefresh, + stereo_mode_str(mode)); + + igt_write_fb_to_png(drm_fd, &fb, buffer); + } + + return fb_id; +} + static cairo_format_t drm_format_to_cairo(uint32_t drm_format) { struct format_desc_struct *f; diff --git a/lib/igt_fb.h b/lib/igt_fb.h index f5110d4..16f6040 100644 --- a/lib/igt_fb.h +++ b/lib/igt_fb.h @@ -72,6 +72,8 @@ unsigned int igt_create_color_fb(int fd, int width, int height, uint32_t format, bool tiled, double r, double g, double b, struct igt_fb *fb /* out */); +unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode); + void igt_remove_fb(int fd, struct igt_fb *fb); /* cairo-based painting */ diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 921afef..abf4bcf 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -166,6 +166,7 @@ bool kmstest_get_property(int drm_fd, uint32_t object_id, uint32_t object_type, drmModePropertyPtr *prop); void kmstest_unset_all_crtcs(int drm_fd, drmModeResPtr resources); + /* * A small modeset API */ diff --git a/tests/testdisplay.c b/tests/testdisplay.c index 89ee110..f3471af 100644 --- a/tests/testdisplay.c +++ b/tests/testdisplay.c @@ -409,125 +409,11 @@ set_mode(struct connector *c) drmModeFreeConnector(c->connector); } -struct box { - int x, y, width, height; -}; - -struct stereo_fb_layout { - int fb_width, fb_height; - struct box left, right; -}; - -static void box_init(struct box *box, int x, int y, int bwidth, int bheight) -{ - box->x = x; - box->y = y; - box->width = bwidth; - box->height = bheight; -} - -static void stereo_fb_layout_from_mode(struct stereo_fb_layout *layout, - drmModeModeInfo *mode) -{ - unsigned int format = mode->flags & DRM_MODE_FLAG_3D_MASK; - const int hdisplay = mode->hdisplay, vdisplay = mode->vdisplay; - int middle; - - switch (format) { - case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: - layout->fb_width = hdisplay; - layout->fb_height = vdisplay; - - middle = vdisplay / 2; - box_init(&layout->left, 0, 0, hdisplay, middle); - box_init(&layout->right, - 0, middle, hdisplay, vdisplay - middle); - break; - case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: - layout->fb_width = hdisplay; - layout->fb_height = vdisplay; - - middle = hdisplay / 2; - box_init(&layout->left, 0, 0, middle, vdisplay); - box_init(&layout->right, - middle, 0, hdisplay - middle, vdisplay); - break; - case DRM_MODE_FLAG_3D_FRAME_PACKING: - { - int vactive_space = mode->vtotal - vdisplay; - - layout->fb_width = hdisplay; - layout->fb_height = 2 * vdisplay + vactive_space; - - box_init(&layout->left, - 0, 0, hdisplay, vdisplay); - box_init(&layout->right, - 0, vdisplay + vactive_space, hdisplay, vdisplay); - break; - } - default: - igt_assert(0); - } -} - -static const char *stereo_mode_str(drmModeModeInfo *mode) -{ - unsigned int layout = mode->flags & DRM_MODE_FLAG_3D_MASK; - - switch (layout) { - case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: - return "TB"; - case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: - return "SbSH"; - case DRM_MODE_FLAG_3D_FRAME_PACKING: - return "FP"; - default: - igt_assert(0); - } -} - -static uint32_t create_stereo_fb(drmModeModeInfo *mode, struct igt_fb *fb) -{ - struct stereo_fb_layout layout; - cairo_t *cr; - uint32_t fb_id; - - stereo_fb_layout_from_mode(&layout, mode); - fb_id = igt_create_fb(drm_fd, layout.fb_width, layout.fb_height, - igt_bpp_depth_to_drm_format(bpp, depth), - enable_tiling, fb); - cr = igt_get_cairo_ctx(drm_fd, fb); - - 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", - layout.right.x, layout.right.y, - layout.right.width, layout.right.height); - - cairo_destroy(cr); - - { - char buffer[64]; - - snprintf(buffer, sizeof(buffer), "%dx%d@%dHz-%s.png", - mode->hdisplay, - mode->vdisplay, - mode->vrefresh, - stereo_mode_str(mode)); - - igt_write_fb_to_png(drm_fd, fb, buffer); - } - - return fb_id; -} - static void do_set_stereo_mode(struct connector *c) { uint32_t fb_id; - struct igt_fb fb_info; - fb_id = create_stereo_fb(&c->mode, &fb_info); + fb_id = igt_create_stereo_fb(drm_fd, &c->mode); igt_warn_on_f(drmModeSetCrtc(drm_fd, c->crtc, fb_id, 0, 0, &c->id, 1, &c->mode), "failed to set mode (%dx%d@%dHz): %s\n", width, height, c->mode.vrefresh, strerror(errno)); -- 1.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH i-g-t 3/3] tests: add kms_3d test 2014-08-20 10:54 [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Thomas Wood 2014-08-20 10:54 ` [PATCH i-g-t 2/3] lib: move create_stereo_fb from testdisplay to igt_fb Thomas Wood @ 2014-08-20 10:54 ` Thomas Wood 2014-08-26 13:38 ` Damien Lespiau 2014-08-26 13:43 ` [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Damien Lespiau 2014-09-04 19:57 ` Clint Taylor 3 siblings, 1 reply; 15+ messages in thread From: Thomas Wood @ 2014-08-20 10:54 UTC (permalink / raw) To: intel-gfx Add a test to verify creation and use of 3D stereo modes. Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- 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(); +} -- 1.9.3 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH i-g-t 3/3] tests: add kms_3d test 2014-08-20 10:54 ` [PATCH i-g-t 3/3] tests: add kms_3d test Thomas Wood @ 2014-08-26 13:38 ` Damien Lespiau 0 siblings, 0 replies; 15+ messages in thread From: Damien Lespiau @ 2014-08-26 13:38 UTC (permalink / raw) To: Thomas Wood; +Cc: intel-gfx On Wed, Aug 20, 2014 at 11:54:09AM +0100, Thomas Wood wrote: > Add a test to verify creation and use of 3D stereo modes. > > Signed-off-by: Thomas Wood <thomas.wood@intel.com> > --- > 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); I guess this hunk really belongs to the previous commit, but for i-g-t, whatever really. > > 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(); > +} > -- > 1.9.3 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d 2014-08-20 10:54 [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Thomas Wood 2014-08-20 10:54 ` [PATCH i-g-t 2/3] lib: move create_stereo_fb from testdisplay to igt_fb Thomas Wood 2014-08-20 10:54 ` [PATCH i-g-t 3/3] tests: add kms_3d test Thomas Wood @ 2014-08-26 13:43 ` Damien Lespiau 2014-09-04 19:57 ` Clint Taylor 3 siblings, 0 replies; 15+ messages in thread From: Damien Lespiau @ 2014-08-26 13:43 UTC (permalink / raw) To: Thomas Wood; +Cc: intel-gfx On Wed, Aug 20, 2014 at 11:54:07AM +0100, Thomas Wood wrote: > kmstest_edid_add_3d adds an EDID extension block with 3D support to a > copy of the specified EDID. > > Signed-off-by: Thomas Wood <thomas.wood@intel.com> The series looks reasonable, ship it! -- Damien > --- > lib/igt_kms.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > lib/igt_kms.h | 1 + > 2 files changed, 81 insertions(+) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index a414d96..eb898f8 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -657,6 +657,86 @@ kmstest_get_property(int drm_fd, uint32_t object_id, uint32_t object_type, > } > > /** > + * kmstest_edid_add_3d: > + * @edid: an existing valid edid block > + * @length: length of @edid > + * @new_edid_ptr: pointer to where the new edid will be placed > + * @new_length: pointer to the size of the new edid > + * > + * Makes a copy of an existing edid block and adds an extension indicating > + * stereo 3D capabilities. > + */ > +void kmstest_edid_add_3d(const unsigned char *edid, size_t length, > + unsigned char *new_edid_ptr[], size_t *new_length) > +{ > + unsigned char *new_edid; > + int n_extensions; > + char sum = 0; > + int pos; > + int i; > + char cea_header_len = 4, video_block_len = 6, vsdb_block_len = 11; > + > + igt_assert(new_edid_ptr != NULL && new_length != NULL); > + > + *new_length = length + 128; > + > + new_edid = calloc(*new_length, sizeof(char)); > + memcpy(new_edid, edid, length); > + *new_edid_ptr = new_edid; > + > + n_extensions = new_edid[126]; > + n_extensions++; > + new_edid[126] = n_extensions; > + > + /* recompute checksum */ > + for (i = 0; i < 127; i++) { > + sum = sum + new_edid[i]; > + } > + new_edid[127] = 256 - sum; > + > + /* add a cea-861 extension block */ > + pos = length; > + new_edid[pos++] = 0x2; > + new_edid[pos++] = 0x3; > + new_edid[pos++] = cea_header_len + video_block_len + vsdb_block_len; > + new_edid[pos++] = 0x0; > + > + /* video block (id | length) */ > + new_edid[pos++] = 2 << 5 | (video_block_len - 1); > + new_edid[pos++] = 32 | 0x80; /* 1080p @ 24Hz | (native)*/ > + new_edid[pos++] = 5; /* 1080i @ 60Hz */ > + new_edid[pos++] = 20; /* 1080i @ 50Hz */ > + new_edid[pos++] = 4; /* 720p @ 60Hz*/ > + new_edid[pos++] = 19; /* 720p @ 50Hz*/ > + > + /* vsdb block ( id | length ) */ > + new_edid[pos++] = 3 << 5 | (vsdb_block_len - 1); > + /* registration id */ > + new_edid[pos++] = 0x3; > + new_edid[pos++] = 0xc; > + new_edid[pos++] = 0x0; > + /* source physical address */ > + new_edid[pos++] = 0x0; > + new_edid[pos++] = 0x0; > + /* Supports_AI ... etc */ > + new_edid[pos++] = 0x00; > + /* Max TMDS Clock */ > + new_edid[pos++] = 0x00; > + /* Latency present, HDMI Video Present */ > + new_edid[pos++] = 0x20; > + /* HDMI Video */ > + new_edid[pos++] = 0x80; > + new_edid[pos++] = 0x00; > + > + /* checksum */ > + sum = 0; > + for (i = 0; i < 127; i++) { > + sum = sum + new_edid[length + i]; > + } > + new_edid[length + 127] = 256 - sum; > +} > + > +/** > * kmstest_unset_all_crtcs: > * @drm_fd: the DRM fd > * @resources: libdrm resources pointer > diff --git a/lib/igt_kms.h b/lib/igt_kms.h > index 4263a01..921afef 100644 > --- a/lib/igt_kms.h > +++ b/lib/igt_kms.h > @@ -149,6 +149,7 @@ enum kmstest_generic_edid { > > bool kmstest_force_connector(int fd, drmModeConnector *connector, > enum kmstest_force_connector_state state); > +void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length); > void kmstest_force_edid(int drm_fd, drmModeConnector *connector, > const unsigned char *edid, size_t length); > > -- > 1.9.3 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d 2014-08-20 10:54 [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Thomas Wood ` (2 preceding siblings ...) 2014-08-26 13:43 ` [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Damien Lespiau @ 2014-09-04 19:57 ` Clint Taylor 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood 3 siblings, 1 reply; 15+ messages in thread From: Clint Taylor @ 2014-09-04 19:57 UTC (permalink / raw) To: Thomas Wood, intel-gfx On 08/20/2014 03:54 AM, Thomas Wood wrote: > kmstest_edid_add_3d adds an EDID extension block with 3D support to a > copy of the specified EDID. > > Signed-off-by: Thomas Wood <thomas.wood@intel.com> > --- > lib/igt_kms.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > lib/igt_kms.h | 1 + > 2 files changed, 81 insertions(+) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index a414d96..eb898f8 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -657,6 +657,86 @@ kmstest_get_property(int drm_fd, uint32_t object_id, uint32_t object_type, > } > > /** > + * kmstest_edid_add_3d: > + * @edid: an existing valid edid block > + * @length: length of @edid > + * @new_edid_ptr: pointer to where the new edid will be placed > + * @new_length: pointer to the size of the new edid > + * > + * Makes a copy of an existing edid block and adds an extension indicating > + * stereo 3D capabilities. > + */ > +void kmstest_edid_add_3d(const unsigned char *edid, size_t length, > + unsigned char *new_edid_ptr[], size_t *new_length) > +{ > + unsigned char *new_edid; > + int n_extensions; > + char sum = 0; > + int pos; > + int i; > + char cea_header_len = 4, video_block_len = 6, vsdb_block_len = 11; > + > + igt_assert(new_edid_ptr != NULL && new_length != NULL); > + > + *new_length = length + 128; > + > + new_edid = calloc(*new_length, sizeof(char)); > + memcpy(new_edid, edid, length); > + *new_edid_ptr = new_edid; > + > + n_extensions = new_edid[126]; > + n_extensions++; > + new_edid[126] = n_extensions; > + > + /* recompute checksum */ > + for (i = 0; i < 127; i++) { > + sum = sum + new_edid[i]; > + } > + new_edid[127] = 256 - sum; > + > + /* add a cea-861 extension block */ > + pos = length; > + new_edid[pos++] = 0x2; > + new_edid[pos++] = 0x3; > + new_edid[pos++] = cea_header_len + video_block_len + vsdb_block_len; > + new_edid[pos++] = 0x0; > + > + /* video block (id | length) */ > + new_edid[pos++] = 2 << 5 | (video_block_len - 1); > + new_edid[pos++] = 32 | 0x80; /* 1080p @ 24Hz | (native)*/ > + new_edid[pos++] = 5; /* 1080i @ 60Hz */ > + new_edid[pos++] = 20; /* 1080i @ 50Hz */ > + new_edid[pos++] = 4; /* 720p @ 60Hz*/ > + new_edid[pos++] = 19; /* 720p @ 50Hz*/ > + > + /* vsdb block ( id | length ) */ > + new_edid[pos++] = 3 << 5 | (vsdb_block_len - 1); > + /* registration id */ > + new_edid[pos++] = 0x3; > + new_edid[pos++] = 0xc; > + new_edid[pos++] = 0x0; > + /* source physical address */ > + new_edid[pos++] = 0x0; > + new_edid[pos++] = 0x0; A CEC SPA of 0.0.0.0 is actually invalid and may cause issues with the EDID decoder. Suggest since this is dummy VSDB make the SPA 1.0.0.0. Clint > + /* Supports_AI ... etc */ > + new_edid[pos++] = 0x00; > + /* Max TMDS Clock */ > + new_edid[pos++] = 0x00; > + /* Latency present, HDMI Video Present */ > + new_edid[pos++] = 0x20; > + /* HDMI Video */ > + new_edid[pos++] = 0x80; > + new_edid[pos++] = 0x00; > + > + /* checksum */ > + sum = 0; > + for (i = 0; i < 127; i++) { > + sum = sum + new_edid[length + i]; > + } > + new_edid[length + 127] = 256 - sum; > +} > + > +/** > * kmstest_unset_all_crtcs: > * @drm_fd: the DRM fd > * @resources: libdrm resources pointer > diff --git a/lib/igt_kms.h b/lib/igt_kms.h > index 4263a01..921afef 100644 > --- a/lib/igt_kms.h > +++ b/lib/igt_kms.h > @@ -149,6 +149,7 @@ enum kmstest_generic_edid { > > bool kmstest_force_connector(int fd, drmModeConnector *connector, > enum kmstest_force_connector_state state); > +void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length); > void kmstest_force_edid(int drm_fd, drmModeConnector *connector, > const unsigned char *edid, size_t length); > > ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH i-g-t v2 0/6] 3D stereo mode testing 2014-09-04 19:57 ` Clint Taylor @ 2014-09-05 9:52 ` Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 1/6] lib: add kmstest_edid_add_3d Thomas Wood ` (5 more replies) 0 siblings, 6 replies; 15+ messages in thread From: Thomas Wood @ 2014-09-05 9:52 UTC (permalink / raw) To: intel-gfx This updated and rebased series fixes various issues with the previous one and also skips testing on gen 7 and 8 where it is not currently possible to force the HDMI and DP connector states. There is also a small documentation fix for igt_create_fb. Thomas Wood (6): lib: add kmstest_edid_add_3d lib: move create_stereo_fb from testdisplay to igt_fb tests: add kms_3d test lib/igt_fb: ensure igt_create_fb parameters are consistent lib: don't force HDMI or DP connectors on gen 7 and 8 tests/kms_3d: skip if connectors cannot be forced lib/Makefile.am | 4 +- lib/igt_fb.c | 102 ++++++++++++++++++++++++++++++++++++++++- lib/igt_fb.h | 4 +- lib/igt_kms.c | 92 +++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 1 + tests/.gitignore | 1 + tests/Android.mk | 1 + tests/Makefile.sources | 1 + tests/kms_3d.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++ tests/testdisplay.c | 118 ++--------------------------------------------- 10 files changed, 327 insertions(+), 118 deletions(-) create mode 100644 tests/kms_3d.c -- 1.9.3 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH i-g-t v2 1/6] lib: add kmstest_edid_add_3d 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood @ 2014-09-05 9:52 ` Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 2/6] lib: move create_stereo_fb from testdisplay to igt_fb Thomas Wood ` (4 subsequent siblings) 5 siblings, 0 replies; 15+ messages in thread From: Thomas Wood @ 2014-09-05 9:52 UTC (permalink / raw) To: intel-gfx kmstest_edid_add_3d adds an EDID extension block with 3D support to a copy of the specified EDID. v2: Avoid using an invalid CEC SPA (Clint Taylor) Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- lib/igt_kms.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 1 + 2 files changed, 81 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index d763013..0dc46f9 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -649,6 +649,86 @@ kmstest_get_property(int drm_fd, uint32_t object_id, uint32_t object_type, } /** + * kmstest_edid_add_3d: + * @edid: an existing valid edid block + * @length: length of @edid + * @new_edid_ptr: pointer to where the new edid will be placed + * @new_length: pointer to the size of the new edid + * + * Makes a copy of an existing edid block and adds an extension indicating + * stereo 3D capabilities. + */ +void kmstest_edid_add_3d(const unsigned char *edid, size_t length, + unsigned char *new_edid_ptr[], size_t *new_length) +{ + unsigned char *new_edid; + int n_extensions; + char sum = 0; + int pos; + int i; + char cea_header_len = 4, video_block_len = 6, vsdb_block_len = 11; + + igt_assert(new_edid_ptr != NULL && new_length != NULL); + + *new_length = length + 128; + + new_edid = calloc(*new_length, sizeof(char)); + memcpy(new_edid, edid, length); + *new_edid_ptr = new_edid; + + n_extensions = new_edid[126]; + n_extensions++; + new_edid[126] = n_extensions; + + /* recompute checksum */ + for (i = 0; i < 127; i++) { + sum = sum + new_edid[i]; + } + new_edid[127] = 256 - sum; + + /* add a cea-861 extension block */ + pos = length; + new_edid[pos++] = 0x2; + new_edid[pos++] = 0x3; + new_edid[pos++] = cea_header_len + video_block_len + vsdb_block_len; + new_edid[pos++] = 0x0; + + /* video block (id | length) */ + new_edid[pos++] = 2 << 5 | (video_block_len - 1); + new_edid[pos++] = 32 | 0x80; /* 1080p @ 24Hz | (native)*/ + new_edid[pos++] = 5; /* 1080i @ 60Hz */ + new_edid[pos++] = 20; /* 1080i @ 50Hz */ + new_edid[pos++] = 4; /* 720p @ 60Hz*/ + new_edid[pos++] = 19; /* 720p @ 50Hz*/ + + /* vsdb block ( id | length ) */ + new_edid[pos++] = 3 << 5 | (vsdb_block_len - 1); + /* registration id */ + new_edid[pos++] = 0x3; + new_edid[pos++] = 0xc; + new_edid[pos++] = 0x0; + /* source physical address */ + new_edid[pos++] = 0x10; + new_edid[pos++] = 0x00; + /* Supports_AI ... etc */ + new_edid[pos++] = 0x00; + /* Max TMDS Clock */ + new_edid[pos++] = 0x00; + /* Latency present, HDMI Video Present */ + new_edid[pos++] = 0x20; + /* HDMI Video */ + new_edid[pos++] = 0x80; + new_edid[pos++] = 0x00; + + /* checksum */ + sum = 0; + for (i = 0; i < 127; i++) { + sum = sum + new_edid[length + i]; + } + new_edid[length + 127] = 256 - sum; +} + +/** * kmstest_unset_all_crtcs: * @drm_fd: the DRM fd * @resources: libdrm resources pointer diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 4263a01..921afef 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -149,6 +149,7 @@ enum kmstest_generic_edid { bool kmstest_force_connector(int fd, drmModeConnector *connector, enum kmstest_force_connector_state state); +void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length); void kmstest_force_edid(int drm_fd, drmModeConnector *connector, const unsigned char *edid, size_t length); -- 1.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH i-g-t v2 2/6] lib: move create_stereo_fb from testdisplay to igt_fb 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 1/6] lib: add kmstest_edid_add_3d Thomas Wood @ 2014-09-05 9:52 ` Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 3/6] tests: add kms_3d test Thomas Wood ` (3 subsequent siblings) 5 siblings, 0 replies; 15+ messages in thread From: Thomas Wood @ 2014-09-05 9:52 UTC (permalink / raw) To: intel-gfx Move create_stereo_fb from testdisplay to igt_create_stereo_fb in igt_fb so that it can be used in other tests. v2: update for new igt_create_fb API add parameters for format and tiling remove some old debug code Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- lib/Makefile.am | 4 +- lib/igt_fb.c | 100 ++++++++++++++++++++++++++++++++++++++++++++ lib/igt_fb.h | 2 + tests/testdisplay.c | 118 ++-------------------------------------------------- 4 files changed, 108 insertions(+), 116 deletions(-) diff --git a/lib/Makefile.am b/lib/Makefile.am index 001ecab..36cf2d3 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -7,7 +7,9 @@ noinst_LTLIBRARIES = libintel_tools.la noinst_HEADERS = check-ndebug.h AM_CPPFLAGS = -I$(top_srcdir) -AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) +AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) \ + -DIGT_DATADIR=\""$(abs_top_srcdir)/tests"\" + LDADD = $(CAIRO_LIBS) AM_CFLAGS += $(CAIRO_CFLAGS) diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 71d9a26..f9f5de2 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -502,6 +502,106 @@ unsigned int igt_create_color_fb(int fd, int width, int height, return fb_id; } +struct box { + int x, y, width, height; +}; + +struct stereo_fb_layout { + int fb_width, fb_height; + struct box left, right; +}; + +static void box_init(struct box *box, int x, int y, int bwidth, int bheight) +{ + box->x = x; + box->y = y; + box->width = bwidth; + box->height = bheight; +} + + +static void stereo_fb_layout_from_mode(struct stereo_fb_layout *layout, + drmModeModeInfo *mode) +{ + unsigned int format = mode->flags & DRM_MODE_FLAG_3D_MASK; + const int hdisplay = mode->hdisplay, vdisplay = mode->vdisplay; + int middle; + + switch (format) { + case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: + layout->fb_width = hdisplay; + layout->fb_height = vdisplay; + + middle = vdisplay / 2; + box_init(&layout->left, 0, 0, hdisplay, middle); + box_init(&layout->right, + 0, middle, hdisplay, vdisplay - middle); + break; + case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: + layout->fb_width = hdisplay; + layout->fb_height = vdisplay; + + middle = hdisplay / 2; + box_init(&layout->left, 0, 0, middle, vdisplay); + box_init(&layout->right, + middle, 0, hdisplay - middle, vdisplay); + break; + case DRM_MODE_FLAG_3D_FRAME_PACKING: + { + int vactive_space = mode->vtotal - vdisplay; + + layout->fb_width = hdisplay; + layout->fb_height = 2 * vdisplay + vactive_space; + + box_init(&layout->left, + 0, 0, hdisplay, vdisplay); + box_init(&layout->right, + 0, vdisplay + vactive_space, hdisplay, vdisplay); + break; + } + default: + igt_assert(0); + } +} + +/** + * igt_create_stereo_fb: + * @drm_fd: open i915 drm file descriptor + * @mode: A stereo 3D mode. + * @format: drm fourcc pixel format code + * @tiling: tiling layout of the framebuffer + * + * Create a framebuffer for use with the stereo 3D mode specified by @mode. + * + * Returns: + * The kms id of the created framebuffer on success or a negative error code on + * failure. + */ +unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode, + uint32_t format, unsigned int tiling) +{ + struct stereo_fb_layout layout; + cairo_t *cr; + uint32_t fb_id; + struct igt_fb fb; + + stereo_fb_layout_from_mode(&layout, mode); + fb_id = igt_create_fb(drm_fd, layout.fb_width, layout.fb_height, format, + tiling, &fb); + cr = igt_get_cairo_ctx(drm_fd, &fb); + + 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", + layout.right.x, layout.right.y, + layout.right.width, layout.right.height); + + cairo_destroy(cr); + + return fb_id; +} + static cairo_format_t drm_format_to_cairo(uint32_t drm_format) { struct format_desc_struct *f; diff --git a/lib/igt_fb.h b/lib/igt_fb.h index 4295df9..e6f72e9 100644 --- a/lib/igt_fb.h +++ b/lib/igt_fb.h @@ -75,6 +75,8 @@ unsigned int igt_create_color_fb(int fd, int width, int height, uint32_t format, unsigned int tiling, double r, double g, double b, struct igt_fb *fb /* out */); +unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode, + uint32_t format, unsigned int tiling); void igt_remove_fb(int fd, struct igt_fb *fb); /* cairo-based painting */ diff --git a/tests/testdisplay.c b/tests/testdisplay.c index dbca203..a3cba44 100644 --- a/tests/testdisplay.c +++ b/tests/testdisplay.c @@ -410,125 +410,13 @@ set_mode(struct connector *c) drmModeFreeConnector(c->connector); } -struct box { - int x, y, width, height; -}; - -struct stereo_fb_layout { - int fb_width, fb_height; - struct box left, right; -}; - -static void box_init(struct box *box, int x, int y, int bwidth, int bheight) -{ - box->x = x; - box->y = y; - box->width = bwidth; - box->height = bheight; -} - -static void stereo_fb_layout_from_mode(struct stereo_fb_layout *layout, - drmModeModeInfo *mode) -{ - unsigned int format = mode->flags & DRM_MODE_FLAG_3D_MASK; - const int hdisplay = mode->hdisplay, vdisplay = mode->vdisplay; - int middle; - - switch (format) { - case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: - layout->fb_width = hdisplay; - layout->fb_height = vdisplay; - - middle = vdisplay / 2; - box_init(&layout->left, 0, 0, hdisplay, middle); - box_init(&layout->right, - 0, middle, hdisplay, vdisplay - middle); - break; - case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: - layout->fb_width = hdisplay; - layout->fb_height = vdisplay; - - middle = hdisplay / 2; - box_init(&layout->left, 0, 0, middle, vdisplay); - box_init(&layout->right, - middle, 0, hdisplay - middle, vdisplay); - break; - case DRM_MODE_FLAG_3D_FRAME_PACKING: - { - int vactive_space = mode->vtotal - vdisplay; - - layout->fb_width = hdisplay; - layout->fb_height = 2 * vdisplay + vactive_space; - - box_init(&layout->left, - 0, 0, hdisplay, vdisplay); - box_init(&layout->right, - 0, vdisplay + vactive_space, hdisplay, vdisplay); - break; - } - default: - igt_assert(0); - } -} - -static const char *stereo_mode_str(drmModeModeInfo *mode) -{ - unsigned int layout = mode->flags & DRM_MODE_FLAG_3D_MASK; - - switch (layout) { - case DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: - return "TB"; - case DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: - return "SbSH"; - case DRM_MODE_FLAG_3D_FRAME_PACKING: - return "FP"; - default: - igt_assert(0); - } -} - -static uint32_t create_stereo_fb(drmModeModeInfo *mode, struct igt_fb *fb) -{ - struct stereo_fb_layout layout; - cairo_t *cr; - uint32_t fb_id; - - stereo_fb_layout_from_mode(&layout, mode); - fb_id = igt_create_fb(drm_fd, layout.fb_width, layout.fb_height, - igt_bpp_depth_to_drm_format(bpp, depth), - tiling, fb); - cr = igt_get_cairo_ctx(drm_fd, fb); - - 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", - layout.right.x, layout.right.y, - layout.right.width, layout.right.height); - - cairo_destroy(cr); - - { - char buffer[64]; - - snprintf(buffer, sizeof(buffer), "%dx%d@%dHz-%s.png", - mode->hdisplay, - mode->vdisplay, - mode->vrefresh, - stereo_mode_str(mode)); - - igt_write_fb_to_png(drm_fd, fb, buffer); - } - - return fb_id; -} - static void do_set_stereo_mode(struct connector *c) { uint32_t fb_id; - struct igt_fb fb_info; - fb_id = create_stereo_fb(&c->mode, &fb_info); + fb_id = igt_create_stereo_fb(drm_fd, &c->mode, + igt_bpp_depth_to_drm_format(bpp, depth), + tiling); igt_warn_on_f(drmModeSetCrtc(drm_fd, c->crtc, fb_id, 0, 0, &c->id, 1, &c->mode), "failed to set mode (%dx%d@%dHz): %s\n", width, height, c->mode.vrefresh, strerror(errno)); -- 1.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH i-g-t v2 3/6] tests: add kms_3d test 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 1/6] lib: add kmstest_edid_add_3d Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 2/6] lib: move create_stereo_fb from testdisplay to igt_fb Thomas Wood @ 2014-09-05 9:52 ` Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 4/6] lib/igt_fb: ensure igt_create_fb parameters are consistent Thomas Wood ` (2 subsequent siblings) 5 siblings, 0 replies; 15+ messages in thread From: Thomas Wood @ 2014-09-05 9:52 UTC (permalink / raw) To: intel-gfx Add a test to verify creation and use of 3D stereo modes. v2: update for API changes Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- tests/.gitignore | 1 + tests/Android.mk | 1 + tests/Makefile.sources | 1 + tests/kms_3d.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 tests/kms_3d.c diff --git a/tests/.gitignore b/tests/.gitignore index efa0c92..1ea0681 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -117,6 +117,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 551555f..a6677dd 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -142,6 +142,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..ddf4dc6 --- /dev/null +++ b/tests/kms_3d.c @@ -0,0 +1,120 @@ +/* + * 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], + igt_bpp_depth_to_drm_format(32, 32), + I915_TILING_NONE); + + 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(); +} -- 1.9.3 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH i-g-t v2 4/6] lib/igt_fb: ensure igt_create_fb parameters are consistent 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood ` (2 preceding siblings ...) 2014-09-05 9:52 ` [PATCH i-g-t v2 3/6] tests: add kms_3d test Thomas Wood @ 2014-09-05 9:52 ` Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 5/6] lib: don't force HDMI or DP connectors on gen 7 and 8 Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 6/6] tests/kms_3d: skip if connectors cannot be forced Thomas Wood 5 siblings, 0 replies; 15+ messages in thread From: Thomas Wood @ 2014-09-05 9:52 UTC (permalink / raw) To: intel-gfx Make sure the parameters in the prototype and implementation of igt_create_fb match and are complete so that the documentation is correct. Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- lib/igt_fb.c | 2 +- lib/igt_fb.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/igt_fb.c b/lib/igt_fb.c index f9f5de2..ce0dd6b 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -455,7 +455,7 @@ igt_create_fb_with_bo_size(int fd, int width, int height, * The kms id of the created framebuffer. */ unsigned int igt_create_fb(int fd, int width, int height, uint32_t format, - unsigned tiling, struct igt_fb *fb) + unsigned int tiling, struct igt_fb *fb) { return igt_create_fb_with_bo_size(fd, width, height, format, tiling, fb, 0); } diff --git a/lib/igt_fb.h b/lib/igt_fb.h index e6f72e9..d9fb6bb 100644 --- a/lib/igt_fb.h +++ b/lib/igt_fb.h @@ -70,7 +70,7 @@ igt_create_fb_with_bo_size(int fd, int width, int height, uint32_t format, unsigned int tiling, struct igt_fb *fb, unsigned bo_size); unsigned int igt_create_fb(int fd, int width, int height, uint32_t format, - unsigned int , struct igt_fb *fb); + unsigned int tiling, struct igt_fb *fb); unsigned int igt_create_color_fb(int fd, int width, int height, uint32_t format, unsigned int tiling, double r, double g, double b, -- 1.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH i-g-t v2 5/6] lib: don't force HDMI or DP connectors on gen 7 and 8 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood ` (3 preceding siblings ...) 2014-09-05 9:52 ` [PATCH i-g-t v2 4/6] lib/igt_fb: ensure igt_create_fb parameters are consistent Thomas Wood @ 2014-09-05 9:52 ` Thomas Wood 2014-09-05 12:15 ` Daniel Vetter 2014-09-05 9:52 ` [PATCH i-g-t v2 6/6] tests/kms_3d: skip if connectors cannot be forced Thomas Wood 5 siblings, 1 reply; 15+ messages in thread From: Thomas Wood @ 2014-09-05 9:52 UTC (permalink / raw) To: intel-gfx Forcing HDMI or DP connectors on gen 7 and 8 doesn't currently work, so fail early to allow the test to skip if required. Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- lib/igt_kms.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 0dc46f9..e9455aa 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -41,6 +41,7 @@ #include "drmtest.h" #include "igt_kms.h" #include "igt_aux.h" +#include "intel_chipset.h" /* * There hasn't been a release of libdrm containing these #define's yet, so @@ -344,6 +345,17 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, char *path; const char *value; int debugfs_fd, ret; + uint32_t devid; + + devid = intel_get_drm_devid(drm_fd); + + /* forcing hdmi or dp connectors on gen 7 and 8 doesn't currently work, + * so fail early to allow the test to skip if required */ + if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || + connector->connector_type == DRM_MODE_CONNECTOR_HDMIB || + connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) + && (IS_GEN7(devid) || IS_GEN8(devid))) + return false; switch (state) { case FORCE_CONNECTOR_ON: -- 1.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH i-g-t v2 5/6] lib: don't force HDMI or DP connectors on gen 7 and 8 2014-09-05 9:52 ` [PATCH i-g-t v2 5/6] lib: don't force HDMI or DP connectors on gen 7 and 8 Thomas Wood @ 2014-09-05 12:15 ` Daniel Vetter 2014-09-09 12:42 ` Ville Syrjälä 0 siblings, 1 reply; 15+ messages in thread From: Daniel Vetter @ 2014-09-05 12:15 UTC (permalink / raw) To: Thomas Wood; +Cc: intel-gfx On Fri, Sep 05, 2014 at 10:52:08AM +0100, Thomas Wood wrote: > Forcing HDMI or DP connectors on gen 7 and 8 doesn't currently work, so > fail early to allow the test to skip if required. > > Signed-off-by: Thomas Wood <thomas.wood@intel.com> > --- > lib/igt_kms.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index 0dc46f9..e9455aa 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -41,6 +41,7 @@ > #include "drmtest.h" > #include "igt_kms.h" > #include "igt_aux.h" > +#include "intel_chipset.h" > > /* > * There hasn't been a release of libdrm containing these #define's yet, so > @@ -344,6 +345,17 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > char *path; > const char *value; > int debugfs_fd, ret; > + uint32_t devid; > + > + devid = intel_get_drm_devid(drm_fd); > + > + /* forcing hdmi or dp connectors on gen 7 and 8 doesn't currently work, > + * so fail early to allow the test to skip if required */ > + if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || > + connector->connector_type == DRM_MODE_CONNECTOR_HDMIB || > + connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) > + && (IS_GEN7(devid) || IS_GEN8(devid))) This catches too many platforms, since on ivb, vlv and chv we _can_ already use this. As well as on earlier platforms at least. And since those platforms are under active testing by QA I think we really want that. So the right check for now is IS_HSW || IS_BDW || IS_SKL (if Damien pushed the igt/libdrm stuff already). -Daniel > + return false; > > switch (state) { > case FORCE_CONNECTOR_ON: > -- > 1.9.3 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH i-g-t v2 5/6] lib: don't force HDMI or DP connectors on gen 7 and 8 2014-09-05 12:15 ` Daniel Vetter @ 2014-09-09 12:42 ` Ville Syrjälä 0 siblings, 0 replies; 15+ messages in thread From: Ville Syrjälä @ 2014-09-09 12:42 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx, Thomas Wood On Fri, Sep 05, 2014 at 02:15:08PM +0200, Daniel Vetter wrote: > On Fri, Sep 05, 2014 at 10:52:08AM +0100, Thomas Wood wrote: > > Forcing HDMI or DP connectors on gen 7 and 8 doesn't currently work, so > > fail early to allow the test to skip if required. > > > > Signed-off-by: Thomas Wood <thomas.wood@intel.com> > > --- > > lib/igt_kms.c | 12 ++++++++++++ > > 1 file changed, 12 insertions(+) > > > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > > index 0dc46f9..e9455aa 100644 > > --- a/lib/igt_kms.c > > +++ b/lib/igt_kms.c > > @@ -41,6 +41,7 @@ > > #include "drmtest.h" > > #include "igt_kms.h" > > #include "igt_aux.h" > > +#include "intel_chipset.h" > > > > /* > > * There hasn't been a release of libdrm containing these #define's yet, so > > @@ -344,6 +345,17 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > > char *path; > > const char *value; > > int debugfs_fd, ret; > > + uint32_t devid; > > + > > + devid = intel_get_drm_devid(drm_fd); > > + > > + /* forcing hdmi or dp connectors on gen 7 and 8 doesn't currently work, > > + * so fail early to allow the test to skip if required */ > > + if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || > > + connector->connector_type == DRM_MODE_CONNECTOR_HDMIB || > > + connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) > > + && (IS_GEN7(devid) || IS_GEN8(devid))) > > This catches too many platforms, since on ivb, vlv and chv we _can_ > already use this. That's a bit of an overstatement. Maybe someone wants to review this? http://lists.freedesktop.org/archives/intel-gfx/2014-May/045564.html -- Ville Syrjälä Intel OTC ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH i-g-t v2 6/6] tests/kms_3d: skip if connectors cannot be forced 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood ` (4 preceding siblings ...) 2014-09-05 9:52 ` [PATCH i-g-t v2 5/6] lib: don't force HDMI or DP connectors on gen 7 and 8 Thomas Wood @ 2014-09-05 9:52 ` Thomas Wood 5 siblings, 0 replies; 15+ messages in thread From: Thomas Wood @ 2014-09-05 9:52 UTC (permalink / raw) To: intel-gfx Signed-off-by: Thomas Wood <thomas.wood@intel.com> --- tests/kms_3d.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/kms_3d.c b/tests/kms_3d.c index ddf4dc6..c11873b 100644 --- a/tests/kms_3d.c +++ b/tests/kms_3d.c @@ -60,7 +60,8 @@ igt_simple_main &length); kmstest_force_edid(drm_fd, connector, edid, length); - kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON); + if (!kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON)) + igt_skip("Could not force connector on\n"); connector_id = connector->connector_id; -- 1.9.3 ^ permalink raw reply related [flat|nested] 15+ messages in thread
end of thread, other threads:[~2014-09-09 12:42 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-08-20 10:54 [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Thomas Wood 2014-08-20 10:54 ` [PATCH i-g-t 2/3] lib: move create_stereo_fb from testdisplay to igt_fb Thomas Wood 2014-08-20 10:54 ` [PATCH i-g-t 3/3] tests: add kms_3d test Thomas Wood 2014-08-26 13:38 ` Damien Lespiau 2014-08-26 13:43 ` [PATCH i-g-t 1/3] lib: add kmstest_edid_add_3d Damien Lespiau 2014-09-04 19:57 ` Clint Taylor 2014-09-05 9:52 ` [PATCH i-g-t v2 0/6] 3D stereo mode testing Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 1/6] lib: add kmstest_edid_add_3d Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 2/6] lib: move create_stereo_fb from testdisplay to igt_fb Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 3/6] tests: add kms_3d test Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 4/6] lib/igt_fb: ensure igt_create_fb parameters are consistent Thomas Wood 2014-09-05 9:52 ` [PATCH i-g-t v2 5/6] lib: don't force HDMI or DP connectors on gen 7 and 8 Thomas Wood 2014-09-05 12:15 ` Daniel Vetter 2014-09-09 12:42 ` Ville Syrjälä 2014-09-05 9:52 ` [PATCH i-g-t v2 6/6] tests/kms_3d: skip if connectors cannot be forced Thomas Wood
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox