* [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
@ 2020-12-08 17:01 Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 1/3] lib/kms: Add fb damage clip plane property Pankaj Bharadiya
` (6 more replies)
0 siblings, 7 replies; 12+ messages in thread
From: Pankaj Bharadiya @ 2020-12-08 17:01 UTC (permalink / raw)
To: gwan-gyeong.mun, igt-dev, jose.souza
Add new test for selective fetch
Pankaj Bharadiya (3):
lib/kms: Add fb damage clip plane property
lib/igt_psr: Add function to check PSR2 selective fetch
tests: Add new PSR2 selective fetch test
lib/igt_kms.c | 3 +
lib/igt_kms.h | 1 +
lib/igt_psr.c | 10 +
lib/igt_psr.h | 1 +
tests/Makefile.sources | 1 +
tests/kms_psr2_sf.c | 649 +++++++++++++++++++++++++++++++++++++++++
tests/meson.build | 1 +
7 files changed, 666 insertions(+)
create mode 100644 tests/kms_psr2_sf.c
--
2.29.2
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* [igt-dev] [PATCH i-g-t 1/3] lib/kms: Add fb damage clip plane property
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
@ 2020-12-08 17:01 ` Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_psr: Add function to check PSR2 selective fetch Pankaj Bharadiya
` (5 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Pankaj Bharadiya @ 2020-12-08 17:01 UTC (permalink / raw)
To: gwan-gyeong.mun, igt-dev, jose.souza
FB_DAMAGE_CLIPS property is been in DRM for a while but was never
added to IGT.
Add support for FB_DAMAGE_CLIPS property so that kms tests can us it.
Reviewed-by: Jose Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
---
lib/igt_kms.c | 3 +++
lib/igt_kms.h | 1 +
2 files changed, 4 insertions(+)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 9175e50fe..1166efcbb 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -396,6 +396,7 @@ const char * const igt_plane_prop_names[IGT_NUM_PLANE_PROPS] = {
[IGT_PLANE_PIXEL_BLEND_MODE] = "pixel blend mode",
[IGT_PLANE_ALPHA] = "alpha",
[IGT_PLANE_ZPOS] = "zpos",
+ [IGT_PLANE_FB_DAMAGE_CLIPS] = "FB_DAMAGE_CLIPS",
};
const char * const igt_crtc_prop_names[IGT_NUM_CRTC_PROPS] = {
@@ -1775,6 +1776,8 @@ static void igt_plane_reset(igt_plane_t *plane)
if (igt_plane_has_prop(plane, IGT_PLANE_ALPHA))
igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0xffff);
+ if (igt_plane_has_prop(plane, IGT_PLANE_FB_DAMAGE_CLIPS))
+ igt_plane_set_prop_value(plane, IGT_PLANE_FB_DAMAGE_CLIPS, 0);
igt_plane_clear_prop_changed(plane, IGT_PLANE_IN_FENCE_FD);
plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 1fcae2436..09b10b3e0 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -281,6 +281,7 @@ enum igt_atomic_plane_properties {
IGT_PLANE_PIXEL_BLEND_MODE,
IGT_PLANE_ALPHA,
IGT_PLANE_ZPOS,
+ IGT_PLANE_FB_DAMAGE_CLIPS,
IGT_NUM_PLANE_PROPS
};
--
2.29.2
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [igt-dev] [PATCH i-g-t 2/3] lib/igt_psr: Add function to check PSR2 selective fetch
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 1/3] lib/kms: Add fb damage clip plane property Pankaj Bharadiya
@ 2020-12-08 17:01 ` Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test Pankaj Bharadiya
` (4 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Pankaj Bharadiya @ 2020-12-08 17:01 UTC (permalink / raw)
To: gwan-gyeong.mun, igt-dev, jose.souza
Add a helper function to check whether "PSR2 selective fetch" is
enabled.
This function should be used wherever "PSR2 selective fetch"
status check needed.
Reviewed-by: Jose Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
---
lib/igt_psr.c | 10 ++++++++++
lib/igt_psr.h | 1 +
2 files changed, 11 insertions(+)
diff --git a/lib/igt_psr.c b/lib/igt_psr.c
index 6cdb97bcc..d5167fbad 100644
--- a/lib/igt_psr.c
+++ b/lib/igt_psr.c
@@ -36,6 +36,16 @@ bool psr_disabled_check(int debugfs_fd)
return strstr(buf, "PSR mode: disabled\n");
}
+bool psr2_selective_fetch_check(int debugfs_fd)
+{
+ char buf[PSR_STATUS_MAX_LEN];
+
+ igt_debugfs_simple_read(debugfs_fd, "i915_edp_psr_status", buf,
+ sizeof(buf));
+
+ return strstr(buf, "PSR2 selective fetch: enabled");
+}
+
static bool psr_active_check(int debugfs_fd, enum psr_mode mode)
{
char buf[PSR_STATUS_MAX_LEN];
diff --git a/lib/igt_psr.h b/lib/igt_psr.h
index 8368ecb49..25111cc2b 100644
--- a/lib/igt_psr.h
+++ b/lib/igt_psr.h
@@ -36,6 +36,7 @@ enum psr_mode {
};
bool psr_disabled_check(int debugfs_fd);
+bool psr2_selective_fetch_check(int debugfs_fd);
bool psr_wait_entry(int debugfs_fd, enum psr_mode mode);
bool psr_wait_update(int debugfs_fd, enum psr_mode mode);
bool psr_long_wait_update(int debugfs_fd, enum psr_mode mode);
--
2.29.2
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 1/3] lib/kms: Add fb damage clip plane property Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_psr: Add function to check PSR2 selective fetch Pankaj Bharadiya
@ 2020-12-08 17:01 ` Pankaj Bharadiya
2020-12-16 10:50 ` Mun, Gwan-gyeong
2020-12-08 17:22 ` [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Souza, Jose
` (3 subsequent siblings)
6 siblings, 1 reply; 12+ messages in thread
From: Pankaj Bharadiya @ 2020-12-08 17:01 UTC (permalink / raw)
To: gwan-gyeong.mun, igt-dev, jose.souza
Selective fetch reduces display engine use of memory bandwidth
by only fetching (reading from memory) the updated regions of the frame
buffer and sending those updated regions to a panel with a PSR2 capability.
The FB_DAMAGE_CLIPS plane property provides user-space a way inform
kernel about the updated regions.
Add new test to verify selective fetch by using FB_DAMAGE_CLIPS property
to send updated regions.
changes since v1:
* alloc enough clips for all tests in stack and reuse (Jose)
* set damage clip along with draw, refactor code, rename
variables, etc (Jose)
Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
---
tests/Makefile.sources | 1 +
tests/kms_psr2_sf.c | 649 +++++++++++++++++++++++++++++++++++++++++
tests/meson.build | 1 +
3 files changed, 651 insertions(+)
create mode 100644 tests/kms_psr2_sf.c
diff --git a/tests/Makefile.sources b/tests/Makefile.sources
index 15fb56048..e7e399165 100644
--- a/tests/Makefile.sources
+++ b/tests/Makefile.sources
@@ -80,6 +80,7 @@ TESTS_progs = \
kms_properties \
kms_psr \
kms_psr2_su \
+ kms_psr2_sf \
kms_pwrite_crc \
kms_rmfb \
kms_rotation_crc \
diff --git a/tests/kms_psr2_sf.c b/tests/kms_psr2_sf.c
new file mode 100644
index 000000000..296ed8476
--- /dev/null
+++ b/tests/kms_psr2_sf.c
@@ -0,0 +1,649 @@
+/*
+ * Copyright © 2020 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.h"
+#include "igt_sysfs.h"
+#include "igt_psr.h"
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include "intel_bufmgr.h"
+
+IGT_TEST_DESCRIPTION("Tests to varify PSR2 selective fetch by sending multiple"
+ " damaged areas");
+
+#define SQUARE_SIZE 100
+
+#define CUR_SIZE 64
+#define MAX_DAMAGE_AREAS 5
+
+enum operations {
+ PLANE_UPDATE,
+ PLANE_MOVE,
+ OVERLAY_PRIM_UPDATE
+};
+
+enum plane_move_postion {
+ POS_TOP_LEFT,
+ POS_TOP_RIGHT,
+ POS_BOTTOM_LEFT,
+ POS_BOTTOM_RIGHT
+};
+
+typedef struct {
+ int drm_fd;
+ int debugfs_fd;
+ igt_display_t display;
+ drm_intel_bufmgr *bufmgr;
+ drmModeModeInfo *mode;
+ igt_output_t *output;
+ struct igt_fb fb_primary, fb_overlay, fb_cursor;
+ struct igt_fb fb_test;
+ int damage_area_count;
+ struct drm_mode_rect plane_update_clip[MAX_DAMAGE_AREAS];
+ struct drm_mode_rect plane_move_clip;
+ struct drm_mode_rect cursor_clip;
+ enum operations op;
+ enum plane_move_postion pos;
+ int test_plane_id;
+ igt_plane_t *test_plane;
+ cairo_t *cr;
+} data_t;
+
+static const char *op_str(enum operations op)
+{
+ static const char * const name[] = {
+ [PLANE_UPDATE] = "plane-update",
+ [PLANE_MOVE] = "plane-move",
+ [OVERLAY_PRIM_UPDATE] = "overlay-primary-update",
+ };
+
+ return name[op];
+}
+
+static void setup_output(data_t *data)
+{
+ igt_display_t *display = &data->display;
+ igt_output_t *output;
+ enum pipe pipe;
+
+ for_each_pipe_with_valid_output(display, pipe, output) {
+ drmModeConnectorPtr c = output->config.connector;
+
+ if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
+ continue;
+
+ igt_output_set_pipe(output, pipe);
+ data->output = output;
+ data->mode = igt_output_get_mode(output);
+
+ return;
+ }
+}
+
+static void display_init(data_t *data)
+{
+ igt_display_require(&data->display, data->drm_fd);
+ setup_output(data);
+}
+
+static void display_fini(data_t *data)
+{
+ igt_display_fini(&data->display);
+}
+
+static void draw_rect(data_t *data, igt_fb_t *fb, int x, int y, int w, int h,
+ double r, double g, double b, double a)
+{
+ cairo_t *cr;
+
+ cr = igt_get_cairo_ctx(data->drm_fd, fb);
+ igt_paint_color_alpha(cr, x, y, w, h, r, g, b, a);
+ igt_put_cairo_ctx(cr);
+}
+
+static void set_clip(struct drm_mode_rect *clip, int x, int y, int width,
+ int height)
+{
+ clip->x1 = x;
+ clip->y1 = y;
+ clip->x2 = x + width;
+ clip->y2 = y + height;
+}
+
+static void plane_update_setup_squares(data_t *data, igt_fb_t *fb, uint32_t h,
+ uint32_t v)
+{
+ int x, y;
+ int width = SQUARE_SIZE;
+ int height = SQUARE_SIZE;
+
+ switch (data->damage_area_count) {
+ case 5:
+ /*Bottom right corner*/
+ x = h - SQUARE_SIZE;
+ y = v - SQUARE_SIZE;
+
+ draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0, 1.0);
+ set_clip(&data->plane_update_clip[4], x, y, width, height);
+ case 4:
+ /*Bottom left corner*/
+ x = 0;
+ y = v - SQUARE_SIZE;
+
+ draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0, 1.0);
+ set_clip(&data->plane_update_clip[3], x, y, width, height);
+ case 3:
+ /*Top right corner*/
+ x = h - SQUARE_SIZE;
+ y = 0;
+
+ draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0, 1.0);
+ set_clip(&data->plane_update_clip[2], x, y, width, height);
+ case 2:
+ /*Top left corner*/
+ x = 0;
+ y = 0;
+
+ draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0, 1.0);
+ set_clip(&data->plane_update_clip[1], x, y, width, height);
+ case 1:
+ /*Center*/
+ x = h/2 - SQUARE_SIZE/2;
+ y = v/2 - SQUARE_SIZE/2;
+
+ draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0, 1.0);
+ set_clip(&data->plane_update_clip[0], x, y, width, height);
+ break;
+ default:
+ igt_assert(false);
+ }
+}
+
+static void plane_move_setup_square(data_t *data, igt_fb_t *fb, uint32_t h,
+ uint32_t v)
+{
+ int x = 0, y = 0;
+
+ switch (data->pos) {
+ case POS_TOP_LEFT:
+ /*Bottom right corner*/
+ x = h - SQUARE_SIZE;
+ y = v - SQUARE_SIZE;
+ break;
+ case POS_TOP_RIGHT:
+ /*Bottom left corner*/
+ x = 0;
+ y = v - SQUARE_SIZE;
+ break;
+ case POS_BOTTOM_LEFT:
+ /*Top right corner*/
+ x = h - SQUARE_SIZE;
+ y = 0;
+ break;
+ case POS_BOTTOM_RIGHT:
+ /*Top left corner*/
+ x = 0;
+ y = 0;
+ break;
+ default:
+ igt_assert(false);
+ }
+
+ draw_rect(data, fb, x, y,
+ SQUARE_SIZE, SQUARE_SIZE, 1.0, 1.0, 1.0, 1.0);
+ set_clip(&data->plane_move_clip, x, y, SQUARE_SIZE, SQUARE_SIZE);
+}
+
+static void prepare(data_t *data)
+{
+ igt_plane_t *primary, *sprite = NULL, *cursor = NULL;
+
+ /* all green frame */
+ igt_create_color_fb(data->drm_fd,
+ data->mode->hdisplay, data->mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE,
+ 0.0, 1.0, 0.0,
+ &data->fb_primary);
+
+ primary = igt_output_get_plane_type(data->output,
+ DRM_PLANE_TYPE_PRIMARY);
+
+ switch (data->test_plane_id) {
+ case DRM_PLANE_TYPE_OVERLAY:
+ sprite = igt_output_get_plane_type(data->output,
+ DRM_PLANE_TYPE_OVERLAY);
+ /*All blue plane*/
+ igt_create_color_fb(data->drm_fd,
+ data->mode->hdisplay/2,
+ data->mode->vdisplay/2,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE,
+ 0.0, 0.0, 1.0,
+ &data->fb_overlay);
+
+ igt_create_color_fb(data->drm_fd,
+ data->mode->hdisplay/2,
+ data->mode->vdisplay/2,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE,
+ 0.0, 0.0, 1.0,
+ &data->fb_test);
+
+ if (data->op == PLANE_MOVE) {
+ plane_move_setup_square(data, &data->fb_test,
+ data->mode->hdisplay/2,
+ data->mode->vdisplay/2);
+
+ } else {
+ plane_update_setup_squares(data, &data->fb_test,
+ data->mode->hdisplay/2,
+ data->mode->vdisplay/2);
+ }
+
+ igt_plane_set_fb(sprite, &data->fb_overlay);
+ data->test_plane = sprite;
+ break;
+
+ case DRM_PLANE_TYPE_PRIMARY:
+ igt_create_color_fb(data->drm_fd,
+ data->mode->hdisplay, data->mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE,
+ 0.0, 1.0, 0.0,
+ &data->fb_test);
+
+ plane_update_setup_squares(data, &data->fb_test,
+ data->mode->hdisplay,
+ data->mode->vdisplay);
+ data->test_plane = primary;
+
+ if (data->op == OVERLAY_PRIM_UPDATE) {
+ sprite = igt_output_get_plane_type(data->output,
+ DRM_PLANE_TYPE_OVERLAY);
+
+ igt_create_color_fb(data->drm_fd,
+ data->mode->hdisplay,
+ data->mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE,
+ 0.0, 0.0, 1.0,
+ &data->fb_overlay);
+
+ igt_plane_set_fb(sprite, &data->fb_overlay);
+ igt_plane_set_prop_value(sprite, IGT_PLANE_ALPHA,
+ 0x6060);
+ }
+ break;
+
+ case DRM_PLANE_TYPE_CURSOR:
+ cursor = igt_output_get_plane_type(data->output,
+ DRM_PLANE_TYPE_CURSOR);
+ igt_plane_set_position(cursor, 0, 0);
+
+ igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
+ DRM_FORMAT_ARGB8888, LOCAL_DRM_FORMAT_MOD_NONE,
+ &data->fb_cursor);
+
+ draw_rect(data, &data->fb_cursor, 0, 0, CUR_SIZE, CUR_SIZE,
+ 0.0, 0.0, 1.0, 1.0);
+
+ igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
+ DRM_FORMAT_ARGB8888, LOCAL_DRM_FORMAT_MOD_NONE,
+ &data->fb_test);
+
+ draw_rect(data, &data->fb_test, 0, 0, CUR_SIZE, CUR_SIZE,
+ 1.0, 1.0, 1.0, 1.0);
+
+ set_clip(&data->cursor_clip, 0, 0, CUR_SIZE, CUR_SIZE);
+ igt_plane_set_fb(cursor, &data->fb_cursor);
+ data->test_plane = cursor;
+ break;
+ default:
+ igt_assert(false);
+ }
+
+ igt_plane_set_fb(primary, &data->fb_primary);
+
+ igt_display_commit2(&data->display, COMMIT_ATOMIC);
+}
+
+static inline void manual(const char *expected)
+{
+ igt_debug_manual_check("all", expected);
+}
+
+static void plane_update_expected_output(int plane_type, int box_count)
+{
+ char expected[64] = {};
+
+ switch (plane_type) {
+ case DRM_PLANE_TYPE_PRIMARY:
+ sprintf(expected, "screen Green with %d White box(es)",
+ box_count);
+ break;
+ case DRM_PLANE_TYPE_OVERLAY:
+ sprintf(expected,
+ "screen Green with Blue box and %d White box(es)",
+ box_count);
+ break;
+ case DRM_PLANE_TYPE_CURSOR:
+ sprintf(expected, "screen Green with %d White box(es)",
+ box_count);
+ break;
+ default:
+ igt_assert(false);
+ }
+
+ manual(expected);
+}
+
+static void plane_move_expected_output(enum plane_move_postion pos)
+{
+ char expected[64] = {};
+
+ switch (pos) {
+ case POS_TOP_LEFT:
+ sprintf(expected,
+ "screen Green with Blue box on top left corner and White box");
+ break;
+ case POS_TOP_RIGHT:
+ sprintf(expected,
+ "screen Green with Blue box on top right corner and White box");
+ break;
+ case POS_BOTTOM_LEFT:
+ sprintf(expected,
+ "screen Green with Blue box on bottom left corner and White box");
+ break;
+ case POS_BOTTOM_RIGHT:
+ sprintf(expected,
+ "screen Green with Blue box on bottom right corner and White box");
+ break;
+ default:
+ igt_assert(false);
+ }
+
+ manual(expected);
+}
+
+static void overlay_prim_update_expected_output(int box_count)
+{
+ char expected[64] = {};
+
+ sprintf(expected,
+ "screen Green with Blue overlay, %d light Blue box(es)",
+ box_count);
+
+ manual(expected);
+
+}
+
+static void expected_output(data_t *data)
+{
+ switch (data->op) {
+ case PLANE_MOVE:
+ plane_move_expected_output(data->pos);
+ break;
+ case PLANE_UPDATE:
+ plane_update_expected_output(data->test_plane_id,
+ data->damage_area_count);
+ break;
+ case OVERLAY_PRIM_UPDATE:
+ overlay_prim_update_expected_output(data->damage_area_count);
+ break;
+ default:
+ igt_assert(false);
+ }
+}
+
+static void damaged_plane_move(data_t *data)
+{
+ igt_plane_t *test_plane = data->test_plane;
+ uint32_t h = data->mode->hdisplay;
+ uint32_t v = data->mode->vdisplay;
+
+ igt_plane_set_fb(test_plane, &data->fb_test);
+
+ if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
+ h = h/2;
+ v = v/2;
+ }
+
+ igt_plane_replace_prop_blob(test_plane, IGT_PLANE_FB_DAMAGE_CLIPS,
+ &data->plane_move_clip,
+ sizeof(struct drm_mode_rect));
+
+ switch (data->pos) {
+ case POS_TOP_LEFT:
+ igt_plane_set_position(data->test_plane, 0, 0);
+ break;
+ case POS_TOP_RIGHT:
+ igt_plane_set_position(data->test_plane,
+ data->mode->hdisplay/2, 0);
+ break;
+ case POS_BOTTOM_LEFT:
+ igt_plane_set_position(data->test_plane, 0,
+ data->mode->vdisplay/2);
+ break;
+ case POS_BOTTOM_RIGHT:
+ igt_plane_set_position(data->test_plane,
+ data->mode->hdisplay/2,
+ data->mode->vdisplay/2);
+ break;
+ default:
+ igt_assert(false);
+ }
+
+ igt_display_commit2(&data->display, COMMIT_ATOMIC);
+
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+
+ expected_output(data);
+}
+
+static void damaged_plane_update(data_t *data)
+{
+ igt_plane_t *test_plane = data->test_plane;
+ uint32_t h = data->mode->hdisplay;
+ uint32_t v = data->mode->vdisplay;
+
+ igt_plane_set_fb(test_plane, &data->fb_test);
+
+ if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
+ h = h/2;
+ v = v/2;
+ }
+
+ if (data->test_plane_id == DRM_PLANE_TYPE_CURSOR)
+ igt_plane_replace_prop_blob(test_plane,
+ IGT_PLANE_FB_DAMAGE_CLIPS,
+ &data->cursor_clip,
+ sizeof(struct drm_mode_rect));
+ else
+ igt_plane_replace_prop_blob(test_plane,
+ IGT_PLANE_FB_DAMAGE_CLIPS,
+ &data->plane_update_clip,
+ sizeof(struct drm_mode_rect)*
+ data->damage_area_count);
+
+ igt_plane_set_position(data->test_plane, 0, 0);
+ igt_display_commit2(&data->display, COMMIT_ATOMIC);
+
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+
+ expected_output(data);
+}
+
+static void run(data_t *data)
+{
+ igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
+
+ switch (data->op) {
+ case PLANE_UPDATE:
+ case OVERLAY_PRIM_UPDATE:
+ damaged_plane_update(data);
+ break;
+ case PLANE_MOVE:
+ damaged_plane_move(data);
+ break;
+ default:
+ igt_assert(false);
+ }
+}
+
+static void cleanup(data_t *data)
+{
+ igt_plane_t *primary;
+ igt_plane_t *sprite;
+
+ primary = igt_output_get_plane_type(data->output,
+ DRM_PLANE_TYPE_PRIMARY);
+
+ igt_plane_set_fb(primary, NULL);
+
+ if (data->test_plane_id != DRM_PLANE_TYPE_PRIMARY) {
+ igt_plane_set_position(data->test_plane, 0, 0);
+ igt_plane_set_fb(data->test_plane, NULL);
+ }
+
+ if (data->op == OVERLAY_PRIM_UPDATE) {
+ sprite = igt_output_get_plane_type(data->output,
+ DRM_PLANE_TYPE_OVERLAY);
+ igt_plane_set_position(sprite, 0, 0);
+ igt_plane_set_fb(sprite, NULL);
+ }
+
+ igt_display_commit2(&data->display, COMMIT_ATOMIC);
+
+ igt_remove_fb(data->drm_fd, &data->fb_primary);
+ igt_remove_fb(data->drm_fd, &data->fb_overlay);
+ igt_remove_fb(data->drm_fd, &data->fb_cursor);
+ igt_remove_fb(data->drm_fd, &data->fb_test);
+}
+
+igt_main
+{
+ data_t data = {};
+ int i;
+
+ igt_fixture {
+ int r;
+
+ data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
+ data.debugfs_fd = igt_debugfs_dir(data.drm_fd);
+ kmstest_set_vt_graphics_mode();
+
+ igt_require_f(psr_sink_support(data.drm_fd,
+ data.debugfs_fd, PSR_MODE_2),
+ "Sink does not support PSR2\n");
+
+ igt_require_f(psr2_selective_fetch_check(data.debugfs_fd),
+ "PSR2 selective fetch not enabled\n");
+
+ data.bufmgr = drm_intel_bufmgr_gem_init(data.drm_fd, 4096);
+ igt_assert(data.bufmgr);
+ drm_intel_bufmgr_gem_enable_reuse(data.bufmgr);
+
+ display_init(&data);
+
+ /* Test if PSR2 can be enabled */
+ igt_require_f(psr_enable(data.drm_fd,
+ data.debugfs_fd, PSR_MODE_2),
+ "Error enabling PSR2\n");
+
+ data.damage_area_count = MAX_DAMAGE_AREAS;
+ data.op = PLANE_UPDATE;
+ data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
+ prepare(&data);
+ r = psr_wait_entry(data.debugfs_fd, PSR_MODE_2);
+ cleanup(&data);
+ if (!r)
+ psr_print_debugfs(data.debugfs_fd);
+ igt_require_f(r, "PSR2 can not be enabled\n");
+ }
+
+ /* Verify primary plane selective fetch */
+ for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
+ igt_subtest_f("primary-%s-sf-dmg-area-%d", op_str(data.op), i) {
+ data.damage_area_count = i;
+ data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
+ prepare(&data);
+ run(&data);
+ cleanup(&data);
+ }
+ }
+
+ /* Verify overlay plane selective fetch */
+ for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
+ igt_subtest_f("overlay-%s-sf-dmg-area-%d", op_str(data.op), i) {
+ data.damage_area_count = i;
+ data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
+ prepare(&data);
+ run(&data);
+ cleanup(&data);
+ }
+ }
+
+ /* Verify overlay plane selective fetch */
+ igt_subtest_f("cursor-%s-sf", op_str(data.op)) {
+ data.damage_area_count = 1;
+ data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
+ prepare(&data);
+ run(&data);
+ cleanup(&data);
+ }
+
+ /* Only for overlay plane */
+ data.op = PLANE_MOVE;
+ /* Verify overlay plane move selective fetch */
+ for (i = POS_TOP_LEFT; i <= POS_BOTTOM_RIGHT ; i++) {
+ igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i) {
+ data.pos = i;
+ data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
+ prepare(&data);
+ run(&data);
+ cleanup(&data);
+ }
+ }
+
+ /* Verify primary plane selective fetch with overplay plane blended */
+ data.op = OVERLAY_PRIM_UPDATE;
+ for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
+ igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i) {
+ data.damage_area_count = i;
+ data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
+ prepare(&data);
+ run(&data);
+ cleanup(&data);
+ }
+ }
+
+ igt_fixture {
+ close(data.debugfs_fd);
+ drm_intel_bufmgr_destroy(data.bufmgr);
+ display_fini(&data);
+ }
+}
diff --git a/tests/meson.build b/tests/meson.build
index a2decf4ab..4cab294b8 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -64,6 +64,7 @@ test_progs = [
'kms_properties',
'kms_psr',
'kms_psr2_su',
+ 'kms_psr2_sf',
'kms_pwrite_crc',
'kms_rmfb',
'kms_rotation_crc',
--
2.29.2
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
` (2 preceding siblings ...)
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test Pankaj Bharadiya
@ 2020-12-08 17:22 ` Souza, Jose
2020-12-08 19:31 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
` (2 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Souza, Jose @ 2020-12-08 17:22 UTC (permalink / raw)
To: Laxminarayan Bharadiya, Pankaj, Mun, Gwan-gyeong, igt-dev
Please go ahead and merge the first 2 patches that are already reviewed.
Send it separated just to make sure that it do not causes any regressions, what I doubt it will.
On Tue, 2020-12-08 at 22:31 +0530, Pankaj Bharadiya wrote:
> Add new test for selective fetch
>
>
> Pankaj Bharadiya (3):
> lib/kms: Add fb damage clip plane property
> lib/igt_psr: Add function to check PSR2 selective fetch
> tests: Add new PSR2 selective fetch test
>
> lib/igt_kms.c | 3 +
> lib/igt_kms.h | 1 +
> lib/igt_psr.c | 10 +
> lib/igt_psr.h | 1 +
> tests/Makefile.sources | 1 +
> tests/kms_psr2_sf.c | 649 +++++++++++++++++++++++++++++++++++++++++
> tests/meson.build | 1 +
> 7 files changed, 666 insertions(+)
> create mode 100644 tests/kms_psr2_sf.c
>
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
` (3 preceding siblings ...)
2020-12-08 17:22 ` [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Souza, Jose
@ 2020-12-08 19:31 ` Patchwork
2020-12-09 0:14 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2021-01-08 12:21 ` [igt-dev] [PATCH i-g-t 0/3] " Petri Latvala
6 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2020-12-08 19:31 UTC (permalink / raw)
To: Pankaj Bharadiya; +Cc: igt-dev
[-- Attachment #1.1: Type: text/plain, Size: 3105 bytes --]
== Series Details ==
Series: Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
URL : https://patchwork.freedesktop.org/series/84696/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_9462 -> IGTPW_5262
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/index.html
Known issues
------------
Here are the changes found in IGTPW_5262 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_pm_rpm@module-reload:
- fi-kbl-guc: [PASS][1] -> [SKIP][2] ([fdo#109271])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html
#### Possible fixes ####
* igt@kms_chamelium@dp-crc-fast:
- fi-kbl-7500u: [FAIL][3] ([i915#1161] / [i915#262]) -> [PASS][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[i915#1161]: https://gitlab.freedesktop.org/drm/intel/issues/1161
[i915#262]: https://gitlab.freedesktop.org/drm/intel/issues/262
Participating hosts (43 -> 38)
------------------------------
Missing (5): fi-ilk-m540 fi-hsw-4200u fi-dg1-1 fi-tgl-y fi-bdw-samus
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_5885 -> IGTPW_5262
CI-20190529: 20190529
CI_DRM_9462: b358df960435469848e291bbebbeb4eca1ff32af @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_5262: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/index.html
IGT_5885: d99f644b1868b9c92435b05ebfafa230721cd677 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
== Testlist changes ==
+igt@kms_psr2_sf@cursor-plane-update-sf
+igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-1
+igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-2
+igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-3
+igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-4
+igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-5
+igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-1
+igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-2
+igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-3
+igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-4
+igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-5
+igt@kms_psr2_sf@plane-move-sf-dmg-area-0
+igt@kms_psr2_sf@plane-move-sf-dmg-area-1
+igt@kms_psr2_sf@plane-move-sf-dmg-area-2
+igt@kms_psr2_sf@plane-move-sf-dmg-area-3
+igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-1
+igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-2
+igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-3
+igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-4
+igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-5
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/index.html
[-- Attachment #1.2: Type: text/html, Size: 3836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 154 bytes --]
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
` (4 preceding siblings ...)
2020-12-08 19:31 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
@ 2020-12-09 0:14 ` Patchwork
2021-01-08 12:21 ` [igt-dev] [PATCH i-g-t 0/3] " Petri Latvala
6 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2020-12-09 0:14 UTC (permalink / raw)
To: Pankaj Bharadiya; +Cc: igt-dev
[-- Attachment #1.1: Type: text/plain, Size: 30275 bytes --]
== Series Details ==
Series: Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
URL : https://patchwork.freedesktop.org/series/84696/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_9462_full -> IGTPW_5262_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/index.html
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_5262_full:
### IGT changes ###
#### Possible regressions ####
* {igt@kms_psr2_sf@cursor-plane-update-sf} (NEW):
- shard-tglb: NOTRUN -> [SKIP][1] +19 similar issues
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb5/igt@kms_psr2_sf@cursor-plane-update-sf.html
* {igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-1} (NEW):
- shard-iclb: NOTRUN -> [SKIP][2] +19 similar issues
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb3/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-1.html
New tests
---------
New tests have been introduced between CI_DRM_9462_full and IGTPW_5262_full:
### New IGT tests (20) ###
* igt@kms_psr2_sf@cursor-plane-update-sf:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-1:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-2:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-3:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-4:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-5:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-1:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-2:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-3:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-4:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-5:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@plane-move-sf-dmg-area-0:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@plane-move-sf-dmg-area-1:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@plane-move-sf-dmg-area-2:
- Statuses : 6 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@plane-move-sf-dmg-area-3:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-1:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-2:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-3:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-4:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-5:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
Known issues
------------
Here are the changes found in IGTPW_5262_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@feature_discovery@display-3x:
- shard-glk: NOTRUN -> [SKIP][3] ([fdo#109271]) +56 similar issues
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk9/igt@feature_discovery@display-3x.html
- shard-iclb: NOTRUN -> [SKIP][4] ([i915#1839])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb6/igt@feature_discovery@display-3x.html
- shard-tglb: NOTRUN -> [SKIP][5] ([i915#1839])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb1/igt@feature_discovery@display-3x.html
* igt@gem_exec_nop@basic-series:
- shard-glk: [PASS][6] -> [DMESG-WARN][7] ([i915#118] / [i915#95])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-glk6/igt@gem_exec_nop@basic-series.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk8/igt@gem_exec_nop@basic-series.html
* igt@gem_exec_params@no-blt:
- shard-iclb: NOTRUN -> [SKIP][8] ([fdo#109283])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb5/igt@gem_exec_params@no-blt.html
* igt@gem_huc_copy@huc-copy:
- shard-iclb: NOTRUN -> [SKIP][9] ([i915#2190])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb3/igt@gem_huc_copy@huc-copy.html
* igt@gem_softpin@noreloc-s3:
- shard-iclb: [PASS][10] -> [DMESG-WARN][11] ([i915#1602])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb7/igt@gem_softpin@noreloc-s3.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb1/igt@gem_softpin@noreloc-s3.html
- shard-apl: [PASS][12] -> [DMESG-WARN][13] ([i915#1602] / [i915#2635])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-apl7/igt@gem_softpin@noreloc-s3.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl3/igt@gem_softpin@noreloc-s3.html
- shard-glk: [PASS][14] -> [DMESG-WARN][15] ([i915#1602] / [i915#2635])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-glk9/igt@gem_softpin@noreloc-s3.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk7/igt@gem_softpin@noreloc-s3.html
- shard-hsw: [PASS][16] -> [DMESG-WARN][17] ([i915#2637])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-hsw4/igt@gem_softpin@noreloc-s3.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-hsw2/igt@gem_softpin@noreloc-s3.html
- shard-kbl: [PASS][18] -> [INCOMPLETE][19] ([i915#2405])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-kbl1/igt@gem_softpin@noreloc-s3.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl6/igt@gem_softpin@noreloc-s3.html
* igt@gen9_exec_parse@bb-chained:
- shard-iclb: NOTRUN -> [SKIP][20] ([fdo#112306]) +1 similar issue
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb4/igt@gen9_exec_parse@bb-chained.html
* igt@gen9_exec_parse@bb-secure:
- shard-tglb: NOTRUN -> [SKIP][21] ([fdo#112306])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb5/igt@gen9_exec_parse@bb-secure.html
* igt@i915_query@query-topology-known-pci-ids:
- shard-iclb: NOTRUN -> [SKIP][22] ([fdo#109303])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb1/igt@i915_query@query-topology-known-pci-ids.html
* igt@i915_query@query-topology-unsupported:
- shard-iclb: NOTRUN -> [SKIP][23] ([fdo#109302])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb5/igt@i915_query@query-topology-unsupported.html
- shard-tglb: NOTRUN -> [SKIP][24] ([fdo#109302])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb7/igt@i915_query@query-topology-unsupported.html
* igt@kms_atomic_transition@5x-modeset-transitions-nonblocking-fencing:
- shard-tglb: NOTRUN -> [SKIP][25] ([fdo#112025])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb5/igt@kms_atomic_transition@5x-modeset-transitions-nonblocking-fencing.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-iclb: NOTRUN -> [SKIP][26] ([fdo#110723])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb1/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-addfb:
- shard-tglb: NOTRUN -> [SKIP][27] ([fdo#111615]) +3 similar issues
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb2/igt@kms_big_fb@yf-tiled-addfb.html
* igt@kms_color@pipe-a-ctm-0-25:
- shard-iclb: NOTRUN -> [FAIL][28] ([i915#1149] / [i915#315])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb4/igt@kms_color@pipe-a-ctm-0-25.html
* igt@kms_color@pipe-d-degamma:
- shard-iclb: NOTRUN -> [SKIP][29] ([fdo#109278] / [i915#1149])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb1/igt@kms_color@pipe-d-degamma.html
- shard-tglb: NOTRUN -> [FAIL][30] ([i915#1149])
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb5/igt@kms_color@pipe-d-degamma.html
* igt@kms_color_chamelium@pipe-a-ctm-negative:
- shard-hsw: NOTRUN -> [SKIP][31] ([fdo#109271] / [fdo#111827])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-hsw1/igt@kms_color_chamelium@pipe-a-ctm-negative.html
- shard-glk: NOTRUN -> [SKIP][32] ([fdo#109271] / [fdo#111827]) +2 similar issues
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk7/igt@kms_color_chamelium@pipe-a-ctm-negative.html
* igt@kms_color_chamelium@pipe-c-ctm-0-25:
- shard-apl: NOTRUN -> [SKIP][33] ([fdo#109271] / [fdo#111827]) +2 similar issues
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl7/igt@kms_color_chamelium@pipe-c-ctm-0-25.html
- shard-kbl: NOTRUN -> [SKIP][34] ([fdo#109271] / [fdo#111827]) +2 similar issues
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl3/igt@kms_color_chamelium@pipe-c-ctm-0-25.html
- shard-tglb: NOTRUN -> [SKIP][35] ([fdo#109284] / [fdo#111827]) +3 similar issues
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb6/igt@kms_color_chamelium@pipe-c-ctm-0-25.html
* igt@kms_color_chamelium@pipe-c-ctm-0-5:
- shard-iclb: NOTRUN -> [SKIP][36] ([fdo#109284] / [fdo#111827]) +5 similar issues
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb5/igt@kms_color_chamelium@pipe-c-ctm-0-5.html
* igt@kms_cursor_crc@pipe-b-cursor-512x170-onscreen:
- shard-tglb: NOTRUN -> [SKIP][37] ([fdo#109279]) +1 similar issue
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb2/igt@kms_cursor_crc@pipe-b-cursor-512x170-onscreen.html
- shard-iclb: NOTRUN -> [SKIP][38] ([fdo#109278] / [fdo#109279]) +1 similar issue
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb2/igt@kms_cursor_crc@pipe-b-cursor-512x170-onscreen.html
* igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque:
- shard-apl: [PASS][39] -> [FAIL][40] ([i915#54])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-apl6/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl4/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html
- shard-kbl: [PASS][41] -> [FAIL][42] ([i915#54])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-kbl6/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl4/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html
* igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
- shard-iclb: NOTRUN -> [SKIP][43] ([fdo#109274] / [fdo#109278])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb5/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic:
- shard-tglb: NOTRUN -> [FAIL][44] ([i915#2346])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb8/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
* igt@kms_fbcon_fbt@fbc-suspend:
- shard-iclb: [PASS][45] -> [INCOMPLETE][46] ([i915#1185] / [i915#1602])
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb3/igt@kms_fbcon_fbt@fbc-suspend.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb7/igt@kms_fbcon_fbt@fbc-suspend.html
- shard-apl: [PASS][47] -> [INCOMPLETE][48] ([i915#1602] / [i915#2635])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-apl8/igt@kms_fbcon_fbt@fbc-suspend.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl8/igt@kms_fbcon_fbt@fbc-suspend.html
- shard-glk: [PASS][49] -> [INCOMPLETE][50] ([i915#1602] / [i915#2635])
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-glk3/igt@kms_fbcon_fbt@fbc-suspend.html
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk5/igt@kms_fbcon_fbt@fbc-suspend.html
- shard-tglb: [PASS][51] -> [INCOMPLETE][52] ([i915#1436] / [i915#1602] / [i915#1887] / [i915#2411] / [i915#456])
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-tglb1/igt@kms_fbcon_fbt@fbc-suspend.html
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb5/igt@kms_fbcon_fbt@fbc-suspend.html
- shard-kbl: [PASS][53] -> [INCOMPLETE][54] ([i915#155] / [i915#636])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-kbl3/igt@kms_fbcon_fbt@fbc-suspend.html
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl3/igt@kms_fbcon_fbt@fbc-suspend.html
* igt@kms_flip@2x-flip-vs-rmfb:
- shard-iclb: NOTRUN -> [SKIP][55] ([fdo#109274]) +2 similar issues
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb5/igt@kms_flip@2x-flip-vs-rmfb.html
* igt@kms_flip@flip-vs-blocking-wf-vblank@a-edp1:
- shard-tglb: NOTRUN -> [FAIL][56] ([i915#2122])
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb5/igt@kms_flip@flip-vs-blocking-wf-vblank@a-edp1.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-onoff:
- shard-tglb: NOTRUN -> [SKIP][57] ([fdo#111825]) +15 similar issues
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-shrfb-fliptrack:
- shard-iclb: NOTRUN -> [SKIP][58] ([fdo#109280]) +15 similar issues
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-2p-shrfb-fliptrack.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu:
- shard-kbl: NOTRUN -> [SKIP][59] ([fdo#109271]) +62 similar issues
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu.html
* igt@kms_hdr@static-toggle-dpms:
- shard-tglb: NOTRUN -> [SKIP][60] ([i915#1187])
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb2/igt@kms_hdr@static-toggle-dpms.html
- shard-iclb: NOTRUN -> [SKIP][61] ([i915#1187]) +1 similar issue
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb2/igt@kms_hdr@static-toggle-dpms.html
* igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
- shard-tglb: [PASS][62] -> [DMESG-WARN][63] ([i915#1436] / [i915#1602] / [i915#1887] / [i915#2411]) +1 similar issue
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-tglb3/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb3/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
* igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
- shard-glk: NOTRUN -> [FAIL][64] ([fdo#108145] / [i915#265])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk8/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max.html
- shard-kbl: NOTRUN -> [FAIL][65] ([fdo#108145] / [i915#265])
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl1/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max.html
- shard-apl: NOTRUN -> [FAIL][66] ([fdo#108145] / [i915#265])
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl6/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max.html
* igt@kms_plane_alpha_blend@pipe-d-coverage-vs-premult-vs-constant:
- shard-iclb: NOTRUN -> [SKIP][67] ([fdo#109278]) +8 similar issues
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb3/igt@kms_plane_alpha_blend@pipe-d-coverage-vs-premult-vs-constant.html
* igt@kms_plane_lowres@pipe-a-tiling-y:
- shard-hsw: NOTRUN -> [SKIP][68] ([fdo#109271]) +37 similar issues
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-hsw4/igt@kms_plane_lowres@pipe-a-tiling-y.html
* igt@kms_properties@connector-properties-legacy:
- shard-kbl: [PASS][69] -> [DMESG-WARN][70] ([i915#165] / [i915#180] / [i915#78])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-kbl4/igt@kms_properties@connector-properties-legacy.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl2/igt@kms_properties@connector-properties-legacy.html
* {igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-2} (NEW):
- shard-apl: NOTRUN -> [SKIP][71] ([fdo#109271]) +62 similar issues
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl8/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-2.html
* {igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-3} (NEW):
- shard-snb: NOTRUN -> [SKIP][72] ([fdo#109271]) +18 similar issues
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-snb7/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-3.html
* igt@kms_psr2_su@page_flip:
- shard-iclb: [PASS][73] -> [SKIP][74] ([fdo#109642] / [fdo#111068])
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb2/igt@kms_psr2_su@page_flip.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb3/igt@kms_psr2_su@page_flip.html
* igt@kms_psr@psr2_cursor_plane_onoff:
- shard-iclb: [PASS][75] -> [SKIP][76] ([fdo#109441]) +1 similar issue
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb2/igt@kms_psr@psr2_cursor_plane_onoff.html
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb3/igt@kms_psr@psr2_cursor_plane_onoff.html
* igt@kms_psr@psr2_primary_mmap_cpu:
- shard-iclb: NOTRUN -> [SKIP][77] ([fdo#109441]) +1 similar issue
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb1/igt@kms_psr@psr2_primary_mmap_cpu.html
* igt@kms_vrr@flipline:
- shard-tglb: NOTRUN -> [SKIP][78] ([fdo#109502])
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb7/igt@kms_vrr@flipline.html
- shard-iclb: NOTRUN -> [SKIP][79] ([fdo#109502])
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb6/igt@kms_vrr@flipline.html
* igt@nouveau_crc@pipe-a-ctx-flip-detection:
- shard-iclb: NOTRUN -> [SKIP][80] ([i915#2530])
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb8/igt@nouveau_crc@pipe-a-ctx-flip-detection.html
- shard-tglb: NOTRUN -> [SKIP][81] ([i915#2530])
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb7/igt@nouveau_crc@pipe-a-ctx-flip-detection.html
* igt@prime_nv_api@nv_i915_reimport_twice_check_flink_name:
- shard-iclb: NOTRUN -> [SKIP][82] ([fdo#109291]) +1 similar issue
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb4/igt@prime_nv_api@nv_i915_reimport_twice_check_flink_name.html
* igt@prime_nv_test@nv_write_i915_cpu_mmap_read:
- shard-tglb: NOTRUN -> [SKIP][83] ([fdo#109291]) +1 similar issue
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb2/igt@prime_nv_test@nv_write_i915_cpu_mmap_read.html
* igt@runner@aborted:
- shard-snb: NOTRUN -> [FAIL][84] ([i915#2426])
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-snb2/igt@runner@aborted.html
* igt@tools_test@sysfs_l3_parity:
- shard-tglb: NOTRUN -> [SKIP][85] ([fdo#109307])
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb3/igt@tools_test@sysfs_l3_parity.html
#### Possible fixes ####
* igt@gem_exec_parallel@contexts@rcs0:
- shard-iclb: [INCOMPLETE][86] -> [PASS][87]
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb4/igt@gem_exec_parallel@contexts@rcs0.html
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb4/igt@gem_exec_parallel@contexts@rcs0.html
* igt@gem_exec_reloc@basic-many-active@rcs0:
- shard-hsw: [FAIL][88] ([i915#2389]) -> [PASS][89]
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-hsw2/igt@gem_exec_reloc@basic-many-active@rcs0.html
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-hsw6/igt@gem_exec_reloc@basic-many-active@rcs0.html
* igt@kms_async_flips@test-time-stamp:
- shard-tglb: [FAIL][90] ([i915#2597]) -> [PASS][91]
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-tglb3/igt@kms_async_flips@test-time-stamp.html
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb3/igt@kms_async_flips@test-time-stamp.html
* igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
- shard-hsw: [FAIL][92] ([i915#96]) -> [PASS][93]
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-hsw8/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-hsw4/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html
* igt@kms_cursor_legacy@cursor-vs-flip-toggle:
- shard-hsw: [FAIL][94] ([i915#2370]) -> [PASS][95]
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-hsw6/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-hsw1/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
* igt@kms_cursor_legacy@flip-vs-cursor-legacy:
- shard-tglb: [FAIL][96] ([i915#2346]) -> [PASS][97]
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-tglb6/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb8/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
* igt@kms_flip@flip-vs-expired-vblank@a-edp1:
- shard-tglb: [FAIL][98] ([i915#2598]) -> [PASS][99]
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-tglb8/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb7/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
* igt@kms_flip@flip-vs-suspend@a-vga1:
- shard-snb: [DMESG-WARN][100] ([i915#42]) -> [PASS][101]
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-snb6/igt@kms_flip@flip-vs-suspend@a-vga1.html
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-snb7/igt@kms_flip@flip-vs-suspend@a-vga1.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
- shard-kbl: [FAIL][102] ([i915#49]) -> [PASS][103]
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-kbl1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
- shard-glk: [FAIL][104] ([i915#49]) -> [PASS][105]
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-glk4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
- shard-apl: [FAIL][106] ([i915#49]) -> [PASS][107]
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-apl7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
* igt@kms_psr@psr2_cursor_plane_move:
- shard-iclb: [SKIP][108] ([fdo#109441]) -> [PASS][109] +2 similar issues
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb1/igt@kms_psr@psr2_cursor_plane_move.html
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb2/igt@kms_psr@psr2_cursor_plane_move.html
* igt@kms_psr@psr2_suspend:
- shard-tglb: [DMESG-WARN][110] ([i915#1436] / [i915#1602] / [i915#1887] / [i915#2411]) -> [PASS][111]
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-tglb2/igt@kms_psr@psr2_suspend.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb8/igt@kms_psr@psr2_suspend.html
* igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend:
- shard-iclb: [DMESG-WARN][112] -> [PASS][113]
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb2/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb4/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
- shard-kbl: [INCOMPLETE][114] ([i915#155] / [i915#2405]) -> [PASS][115]
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-kbl2/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-kbl3/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
- shard-hsw: [DMESG-WARN][116] ([i915#2637]) -> [PASS][117]
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-hsw4/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-hsw4/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
- shard-glk: [DMESG-WARN][118] ([i915#2635]) -> [PASS][119]
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-glk6/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk4/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
- shard-apl: [DMESG-WARN][120] ([i915#2635]) -> [PASS][121]
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-apl3/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl7/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
- shard-tglb: [INCOMPLETE][122] ([i915#1436] / [i915#1602] / [i915#1798] / [i915#1887] / [i915#1982] / [i915#2411] / [i915#456]) -> [PASS][123]
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-tglb8/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-tglb6/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
#### Warnings ####
* igt@i915_pm_rc6_residency@rc6-fence:
- shard-iclb: [WARN][124] ([i915#2684]) -> [WARN][125] ([i915#2681] / [i915#2684])
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb2/igt@i915_pm_rc6_residency@rc6-fence.html
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb1/igt@i915_pm_rc6_residency@rc6-fence.html
* igt@i915_pm_rc6_residency@rc6-idle:
- shard-iclb: [WARN][126] ([i915#1804] / [i915#2684]) -> [WARN][127] ([i915#2684])
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb3/igt@i915_pm_rc6_residency@rc6-idle.html
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb2/igt@i915_pm_rc6_residency@rc6-idle.html
* igt@runner@aborted:
- shard-iclb: ([FAIL][128], [FAIL][129]) ([i915#1814] / [i915#2295] / [i915#2722] / [i915#483]) -> ([FAIL][130], [FAIL][131], [FAIL][132]) ([i915#2295] / [i915#2722] / [i915#483])
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb2/igt@runner@aborted.html
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-iclb1/igt@runner@aborted.html
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb1/igt@runner@aborted.html
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb2/igt@runner@aborted.html
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-iclb7/igt@runner@aborted.html
- shard-apl: ([FAIL][133], [FAIL][134]) ([i915#1814] / [i915#2295] / [i915#2722]) -> ([FAIL][135], [FAIL][136], [FAIL][137]) ([i915#2295] / [i915#2722])
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-apl2/igt@runner@aborted.html
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-apl3/igt@runner@aborted.html
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl3/igt@runner@aborted.html
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl8/igt@runner@aborted.html
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-apl4/igt@runner@aborted.html
- shard-glk: ([FAIL][138], [FAIL][139]) ([i915#1814] / [i915#2295] / [i915#2722] / [k.org#202321]) -> ([FAIL][140], [FAIL][141], [FAIL][142]) ([i915#2295] / [i915#2722] / [i915#483] / [i915#86] / [k.org#202321])
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-glk9/igt@runner@aborted.html
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462/shard-glk6/igt@runner@aborted.html
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk7/igt@runner@aborted.html
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk5/igt@runner@aborted.html
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/shard-glk6/igt@runner@aborted.html
- shard-tglb: ([FAIL][143], [FAIL][144], [FAIL][145]) ([i915#1602] / [i915#1814] / [i915#2295] / [i915#2722]) -> ([FAIL][146], [FAIL][147], [FAIL][148], [FAIL][149]) ([i915#1602] / [i915#2295] / [i915#2722] / [i915#456])
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9462
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5262/index.html
[-- Attachment #1.2: Type: text/html, Size: 33679 bytes --]
[-- Attachment #2: Type: text/plain, Size: 154 bytes --]
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test Pankaj Bharadiya
@ 2020-12-16 10:50 ` Mun, Gwan-gyeong
2020-12-21 4:44 ` Laxminarayan Bharadiya, Pankaj
0 siblings, 1 reply; 12+ messages in thread
From: Mun, Gwan-gyeong @ 2020-12-16 10:50 UTC (permalink / raw)
To: Laxminarayan Bharadiya, Pankaj, igt-dev, Souza, Jose
On Tue, 2020-12-08 at 22:31 +0530, Pankaj Bharadiya wrote:
> Selective fetch reduces display engine use of memory bandwidth
> by only fetching (reading from memory) the updated regions of the
> frame
> buffer and sending those updated regions to a panel with a PSR2
> capability.
>
> The FB_DAMAGE_CLIPS plane property provides user-space a way inform
> kernel about the updated regions.
>
> Add new test to verify selective fetch by using FB_DAMAGE_CLIPS
> property
> to send updated regions.
>
> changes since v1:
> * alloc enough clips for all tests in stack and reuse (Jose)
> * set damage clip along with draw, refactor code, rename
> variables, etc (Jose)
>
> Signed-off-by: Pankaj Bharadiya <
> pankaj.laxminarayan.bharadiya@intel.com>
> ---
> tests/Makefile.sources | 1 +
> tests/kms_psr2_sf.c | 649
> +++++++++++++++++++++++++++++++++++++++++
> tests/meson.build | 1 +
> 3 files changed, 651 insertions(+)
> create mode 100644 tests/kms_psr2_sf.c
>
> diff --git a/tests/Makefile.sources b/tests/Makefile.sources
> index 15fb56048..e7e399165 100644
> --- a/tests/Makefile.sources
> +++ b/tests/Makefile.sources
> @@ -80,6 +80,7 @@ TESTS_progs = \
> kms_properties \
> kms_psr \
> kms_psr2_su \
> + kms_psr2_sf \
> kms_pwrite_crc \
> kms_rmfb \
> kms_rotation_crc \
> diff --git a/tests/kms_psr2_sf.c b/tests/kms_psr2_sf.c
> new file mode 100644
> index 000000000..296ed8476
> --- /dev/null
> +++ b/tests/kms_psr2_sf.c
> @@ -0,0 +1,649 @@
> +/*
> + * Copyright © 2020 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.h"
> +#include "igt_sysfs.h"
> +#include "igt_psr.h"
> +#include <errno.h>
> +#include <stdbool.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include "intel_bufmgr.h"
> +
> +IGT_TEST_DESCRIPTION("Tests to varify PSR2 selective fetch by
> sending multiple"
> + " damaged areas");
> +
> +#define SQUARE_SIZE 100
> +
> +#define CUR_SIZE 64
> +#define MAX_DAMAGE_AREAS 5
> +
> +enum operations {
> + PLANE_UPDATE,
> + PLANE_MOVE,
> + OVERLAY_PRIM_UPDATE
> +};
> +
Hi, can you also add use case which uses igt_fb_set_position()?
> +enum plane_move_postion {
> + POS_TOP_LEFT,
> + POS_TOP_RIGHT,
> + POS_BOTTOM_LEFT,
> + POS_BOTTOM_RIGHT
> +};
> +
> +typedef struct {
> + int drm_fd;
> + int debugfs_fd;
> + igt_display_t display;
> + drm_intel_bufmgr *bufmgr;
> + drmModeModeInfo *mode;
> + igt_output_t *output;
> + struct igt_fb fb_primary, fb_overlay, fb_cursor;
> + struct igt_fb fb_test;
> + int damage_area_count;
> + struct drm_mode_rect plane_update_clip[MAX_DAMAGE_AREAS];
> + struct drm_mode_rect plane_move_clip;
> + struct drm_mode_rect cursor_clip;
> + enum operations op;
> + enum plane_move_postion pos;
> + int test_plane_id;
> + igt_plane_t *test_plane;
> + cairo_t *cr;
> +} data_t;
> +
> +static const char *op_str(enum operations op)
> +{
> + static const char * const name[] = {
> + [PLANE_UPDATE] = "plane-update",
> + [PLANE_MOVE] = "plane-move",
> + [OVERLAY_PRIM_UPDATE] = "overlay-primary-update",
> + };
> +
> + return name[op];
> +}
> +
> +static void setup_output(data_t *data)
> +{
> + igt_display_t *display = &data->display;
> + igt_output_t *output;
> + enum pipe pipe;
> +
> + for_each_pipe_with_valid_output(display, pipe, output) {
> + drmModeConnectorPtr c = output->config.connector;
> +
> + if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
> + continue;
> +
> + igt_output_set_pipe(output, pipe);
> + data->output = output;
> + data->mode = igt_output_get_mode(output);
> +
> + return;
> + }
> +}
> +
> +static void display_init(data_t *data)
> +{
> + igt_display_require(&data->display, data->drm_fd);
> + setup_output(data);
> +}
> +
> +static void display_fini(data_t *data)
> +{
> + igt_display_fini(&data->display);
> +}
> +
> +static void draw_rect(data_t *data, igt_fb_t *fb, int x, int y, int
> w, int h,
> + double r, double g, double b, double a)
> +{
> + cairo_t *cr;
> +
> + cr = igt_get_cairo_ctx(data->drm_fd, fb);
> + igt_paint_color_alpha(cr, x, y, w, h, r, g, b, a);
> + igt_put_cairo_ctx(cr);
> +}
> +
> +static void set_clip(struct drm_mode_rect *clip, int x, int y, int
> width,
> + int height)
> +{
> + clip->x1 = x;
> + clip->y1 = y;
> + clip->x2 = x + width;
> + clip->y2 = y + height;
> +}
> +
> +static void plane_update_setup_squares(data_t *data, igt_fb_t *fb,
> uint32_t h,
> + uint32_t v)
> +{
> + int x, y;
> + int width = SQUARE_SIZE;
> + int height = SQUARE_SIZE;
> +
> + switch (data->damage_area_count) {
> + case 5:
> + /*Bottom right corner*/
> + x = h - SQUARE_SIZE;
> + y = v - SQUARE_SIZE;
> +
> + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> 1.0);
> + set_clip(&data->plane_update_clip[4], x, y, width,
> height);
> + case 4:
> + /*Bottom left corner*/
> + x = 0;
> + y = v - SQUARE_SIZE;
> +
> + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> 1.0);
> + set_clip(&data->plane_update_clip[3], x, y, width,
> height);
> + case 3:
> + /*Top right corner*/
> + x = h - SQUARE_SIZE;
> + y = 0;
> +
> + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> 1.0);
> + set_clip(&data->plane_update_clip[2], x, y, width,
> height);
> + case 2:
> + /*Top left corner*/
> + x = 0;
> + y = 0;
> +
> + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> 1.0);
> + set_clip(&data->plane_update_clip[1], x, y, width,
> height);
> + case 1:
> + /*Center*/
> + x = h/2 - SQUARE_SIZE/2;
> + y = v/2 - SQUARE_SIZE/2;
> +
> + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> 1.0);
> + set_clip(&data->plane_update_clip[0], x, y, width,
> height);
> + break;
> + default:
> + igt_assert(false);
> + }
> +}
> +
> +static void plane_move_setup_square(data_t *data, igt_fb_t *fb,
> uint32_t h,
> + uint32_t v)
> +{
> + int x = 0, y = 0;
> +
> + switch (data->pos) {
> + case POS_TOP_LEFT:
> + /*Bottom right corner*/
it seems that the comments do not match enum name.
> + x = h - SQUARE_SIZE;
> + y = v - SQUARE_SIZE;
> + break;
> + case POS_TOP_RIGHT:
> + /*Bottom left corner*/
> + x = 0;
> + y = v - SQUARE_SIZE;
> + break;
> + case POS_BOTTOM_LEFT:
> + /*Top right corner*/
> + x = h - SQUARE_SIZE;
> + y = 0;
> + break;
> + case POS_BOTTOM_RIGHT:
> + /*Top left corner*/
> + x = 0;
> + y = 0;
> + break;
> + default:
> + igt_assert(false);
> + }
> +
> + draw_rect(data, fb, x, y,
> + SQUARE_SIZE, SQUARE_SIZE, 1.0, 1.0, 1.0, 1.0);
> + set_clip(&data->plane_move_clip, x, y, SQUARE_SIZE,
> SQUARE_SIZE);
> +}
> +
> +static void prepare(data_t *data)
> +{
> + igt_plane_t *primary, *sprite = NULL, *cursor = NULL;
> +
> + /* all green frame */
> + igt_create_color_fb(data->drm_fd,
> + data->mode->hdisplay, data->mode->vdisplay,
> + DRM_FORMAT_XRGB8888,
> + LOCAL_DRM_FORMAT_MOD_NONE,
> + 0.0, 1.0, 0.0,
> + &data->fb_primary);
> +
> + primary = igt_output_get_plane_type(data->output,
> + DRM_PLANE_TYPE_PRIMARY);
> +
> + switch (data->test_plane_id) {
> + case DRM_PLANE_TYPE_OVERLAY:
> + sprite = igt_output_get_plane_type(data->output,
> + DRM_PLANE_TYPE_OVERL
> AY);
> + /*All blue plane*/
> + igt_create_color_fb(data->drm_fd,
> + data->mode->hdisplay/2,
> + data->mode->vdisplay/2,
> + DRM_FORMAT_XRGB8888,
> + LOCAL_DRM_FORMAT_MOD_NONE,
> + 0.0, 0.0, 1.0,
> + &data->fb_overlay);
> +
> + igt_create_color_fb(data->drm_fd,
> + data->mode->hdisplay/2,
> + data->mode->vdisplay/2,
> + DRM_FORMAT_XRGB8888,
> + LOCAL_DRM_FORMAT_MOD_NONE,
> + 0.0, 0.0, 1.0,
> + &data->fb_test);
> +
> + if (data->op == PLANE_MOVE) {
> + plane_move_setup_square(data, &data->fb_test,
> + data->mode->hdisplay/2,
> + data->mode->vdisplay/2);
> +
> + } else {
> + plane_update_setup_squares(data, &data-
> >fb_test,
> + data->mode->hdisplay/2,
> + data->mode->vdisplay/2);
> + }
> +
> + igt_plane_set_fb(sprite, &data->fb_overlay);
> + data->test_plane = sprite;
> + break;
> +
> + case DRM_PLANE_TYPE_PRIMARY:
> + igt_create_color_fb(data->drm_fd,
> + data->mode->hdisplay, data->mode->vdisplay,
> + DRM_FORMAT_XRGB8888,
> + LOCAL_DRM_FORMAT_MOD_NONE,
> + 0.0, 1.0, 0.0,
> + &data->fb_test);
> +
> + plane_update_setup_squares(data, &data->fb_test,
> + data->mode->hdisplay,
> + data->mode->vdisplay);
> + data->test_plane = primary;
> +
> + if (data->op == OVERLAY_PRIM_UPDATE) {
> + sprite = igt_output_get_plane_type(data-
> >output,
> + DRM_PLANE_TYPE_OVERL
> AY);
> +
> + igt_create_color_fb(data->drm_fd,
> + data->mode->hdisplay,
> + data->mode->vdisplay,
> + DRM_FORMAT_XRGB8888,
> + LOCAL_DRM_FORMAT_MOD_NONE,
> + 0.0, 0.0, 1.0,
> + &data->fb_overlay);
> +
> + igt_plane_set_fb(sprite, &data->fb_overlay);
> + igt_plane_set_prop_value(sprite,
> IGT_PLANE_ALPHA,
> + 0x6060);
> + }
> + break;
> +
> + case DRM_PLANE_TYPE_CURSOR:
> + cursor = igt_output_get_plane_type(data->output,
> + DRM_PLANE_TYPE_CURSO
> R);
> + igt_plane_set_position(cursor, 0, 0);
> +
> + igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
> + DRM_FORMAT_ARGB8888,
> LOCAL_DRM_FORMAT_MOD_NONE,
> + &data->fb_cursor);
> +
> + draw_rect(data, &data->fb_cursor, 0, 0, CUR_SIZE,
> CUR_SIZE,
> + 0.0, 0.0, 1.0, 1.0);
> +
> + igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
> + DRM_FORMAT_ARGB8888,
> LOCAL_DRM_FORMAT_MOD_NONE,
> + &data->fb_test);
> +
> + draw_rect(data, &data->fb_test, 0, 0, CUR_SIZE,
> CUR_SIZE,
> + 1.0, 1.0, 1.0, 1.0);
> +
> + set_clip(&data->cursor_clip, 0, 0, CUR_SIZE, CUR_SIZE);
> + igt_plane_set_fb(cursor, &data->fb_cursor);
> + data->test_plane = cursor;
> + break;
> + default:
> + igt_assert(false);
> + }
> +
> + igt_plane_set_fb(primary, &data->fb_primary);
> +
> + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> +}
> +
> +static inline void manual(const char *expected)
> +{
> + igt_debug_manual_check("all", expected);
> +}
> +
> +static void plane_update_expected_output(int plane_type, int
> box_count)
> +{
> + char expected[64] = {};
> +
> + switch (plane_type) {
> + case DRM_PLANE_TYPE_PRIMARY:
> + sprintf(expected, "screen Green with %d White box(es)",
> + box_count);
> + break;
> + case DRM_PLANE_TYPE_OVERLAY:
> + sprintf(expected,
> + "screen Green with Blue box and %d White
> box(es)",
> + box_count);
> + break;
> + case DRM_PLANE_TYPE_CURSOR:
> + sprintf(expected, "screen Green with %d White box(es)",
> + box_count);
> + break;
> + default:
> + igt_assert(false);
> + }
> +
> + manual(expected);
> +}
> +
> +static void plane_move_expected_output(enum plane_move_postion pos)
> +{
> + char expected[64] = {};
> +
> + switch (pos) {
> + case POS_TOP_LEFT:
> + sprintf(expected,
> + "screen Green with Blue box on top left corner
> and White box");
> + break;
> + case POS_TOP_RIGHT:
> + sprintf(expected,
> + "screen Green with Blue box on top right corner
> and White box");
> + break;
> + case POS_BOTTOM_LEFT:
> + sprintf(expected,
> + "screen Green with Blue box on bottom left
> corner and White box");
> + break;
> + case POS_BOTTOM_RIGHT:
> + sprintf(expected,
> + "screen Green with Blue box on bottom right
> corner and White box");
> + break;
> + default:
> + igt_assert(false);
> + }
> +
> + manual(expected);
> +}
> +
> +static void overlay_prim_update_expected_output(int box_count)
> +{
> + char expected[64] = {};
> +
> + sprintf(expected,
> + "screen Green with Blue overlay, %d light Blue
> box(es)",
> + box_count);
> +
> + manual(expected);
> +
> +}
> +
> +static void expected_output(data_t *data)
> +{
> + switch (data->op) {
> + case PLANE_MOVE:
> + plane_move_expected_output(data->pos);
> + break;
> + case PLANE_UPDATE:
> + plane_update_expected_output(data->test_plane_id,
> + data->damage_area_count);
> + break;
> + case OVERLAY_PRIM_UPDATE:
> + overlay_prim_update_expected_output(data-
> >damage_area_count);
> + break;
> + default:
> + igt_assert(false);
> + }
> +}
> +
> +static void damaged_plane_move(data_t *data)
> +{
> + igt_plane_t *test_plane = data->test_plane;
> + uint32_t h = data->mode->hdisplay;
> + uint32_t v = data->mode->vdisplay;
> +
> + igt_plane_set_fb(test_plane, &data->fb_test);
> +
> + if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
> + h = h/2;
> + v = v/2;
> + }
> +
> + igt_plane_replace_prop_blob(test_plane,
> IGT_PLANE_FB_DAMAGE_CLIPS,
> + &data->plane_move_clip,
> + sizeof(struct drm_mode_rect));
> +
> + switch (data->pos) {
> + case POS_TOP_LEFT:
> + igt_plane_set_position(data->test_plane, 0, 0);
> + break;
> + case POS_TOP_RIGHT:
> + igt_plane_set_position(data->test_plane,
> + data->mode->hdisplay/2, 0);
> + break;
> + case POS_BOTTOM_LEFT:
> + igt_plane_set_position(data->test_plane, 0,
> + data->mode->vdisplay/2);
> + break;
> + case POS_BOTTOM_RIGHT:
> + igt_plane_set_position(data->test_plane,
> + data->mode->hdisplay/2,
> + data->mode->vdisplay/2);
> + break;
> + default:
> + igt_assert(false);
> + }
> +
> + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> +
> + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> +
> + expected_output(data);
> +}
> +
> +static void damaged_plane_update(data_t *data)
> +{
> + igt_plane_t *test_plane = data->test_plane;
> + uint32_t h = data->mode->hdisplay;
> + uint32_t v = data->mode->vdisplay;
> +
> + igt_plane_set_fb(test_plane, &data->fb_test);
> +
> + if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
> + h = h/2;
> + v = v/2;
> + }
> +
> + if (data->test_plane_id == DRM_PLANE_TYPE_CURSOR)
> + igt_plane_replace_prop_blob(test_plane,
> + IGT_PLANE_FB_DAMAGE_CLIPS,
> + &data->cursor_clip,
> + sizeof(struct
> drm_mode_rect));
> + else
> + igt_plane_replace_prop_blob(test_plane,
> + IGT_PLANE_FB_DAMAGE_CLIPS,
> + &data->plane_update_clip,
> + sizeof(struct
> drm_mode_rect)*
> + data->damage_area_count);
> +
> + igt_plane_set_position(data->test_plane, 0, 0);
> + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> +
> + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> +
> + expected_output(data);
> +}
> +
> +static void run(data_t *data)
> +{
> + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> +
> + switch (data->op) {
> + case PLANE_UPDATE:
> + case OVERLAY_PRIM_UPDATE:
> + damaged_plane_update(data);
> + break;
> + case PLANE_MOVE:
> + damaged_plane_move(data);
> + break;
> + default:
> + igt_assert(false);
> + }
> +}
> +
> +static void cleanup(data_t *data)
> +{
> + igt_plane_t *primary;
> + igt_plane_t *sprite;
> +
> + primary = igt_output_get_plane_type(data->output,
> + DRM_PLANE_TYPE_PRIMARY);
> +
> + igt_plane_set_fb(primary, NULL);
> +
> + if (data->test_plane_id != DRM_PLANE_TYPE_PRIMARY) {
> + igt_plane_set_position(data->test_plane, 0, 0);
> + igt_plane_set_fb(data->test_plane, NULL);
> + }
> +
> + if (data->op == OVERLAY_PRIM_UPDATE) {
> + sprite = igt_output_get_plane_type(data->output,
> + DRM_PLANE_TYPE_OVERLAY);
> + igt_plane_set_position(sprite, 0, 0);
> + igt_plane_set_fb(sprite, NULL);
> + }
> +
> + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> +
> + igt_remove_fb(data->drm_fd, &data->fb_primary);
> + igt_remove_fb(data->drm_fd, &data->fb_overlay);
> + igt_remove_fb(data->drm_fd, &data->fb_cursor);
> + igt_remove_fb(data->drm_fd, &data->fb_test);
> +}
> +
> +igt_main
> +{
> + data_t data = {};
> + int i;
> +
> + igt_fixture {
> + int r;
> +
> + data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
> + data.debugfs_fd = igt_debugfs_dir(data.drm_fd);
> + kmstest_set_vt_graphics_mode();
> +
> + igt_require_f(psr_sink_support(data.drm_fd,
> + data.debugfs_fd,
> PSR_MODE_2),
> + "Sink does not support PSR2\n");
> +
> + igt_require_f(psr2_selective_fetch_check(data.debugfs_f
> d),
> + "PSR2 selective fetch not enabled\n");
> +
> + data.bufmgr = drm_intel_bufmgr_gem_init(data.drm_fd,
> 4096);
> + igt_assert(data.bufmgr);
> + drm_intel_bufmgr_gem_enable_reuse(data.bufmgr);
> +
> + display_init(&data);
> +
> + /* Test if PSR2 can be enabled */
> + igt_require_f(psr_enable(data.drm_fd,
> + data.debugfs_fd, PSR_MODE_2),
> + "Error enabling PSR2\n");
> +
> + data.damage_area_count = MAX_DAMAGE_AREAS;
> + data.op = PLANE_UPDATE;
> + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> + prepare(&data);
> + r = psr_wait_entry(data.debugfs_fd, PSR_MODE_2);
> + cleanup(&data);
> + if (!r)
> + psr_print_debugfs(data.debugfs_fd);
> + igt_require_f(r, "PSR2 can not be enabled\n");
> + }
> +
> + /* Verify primary plane selective fetch */
> + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> + igt_subtest_f("primary-%s-sf-dmg-area-%d",
> op_str(data.op), i) {
> + data.damage_area_count = i;
> + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> +
> + /* Verify overlay plane selective fetch */
> + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> + igt_subtest_f("overlay-%s-sf-dmg-area-%d",
> op_str(data.op), i) {
> + data.damage_area_count = i;
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> +
> + /* Verify overlay plane selective fetch */
> + igt_subtest_f("cursor-%s-sf", op_str(data.op)) {
> + data.damage_area_count = 1;
> + data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> +
> + /* Only for overlay plane */
> + data.op = PLANE_MOVE;
> + /* Verify overlay plane move selective fetch */
> + for (i = POS_TOP_LEFT; i <= POS_BOTTOM_RIGHT ; i++) {
> + igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i)
> {
> + data.pos = i;
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> +
> + /* Verify primary plane selective fetch with overplay plane
> blended */
> + data.op = OVERLAY_PRIM_UPDATE;
> + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> + igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i)
> {
> + data.damage_area_count = i;
> + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> +
> + igt_fixture {
> + close(data.debugfs_fd);
> + drm_intel_bufmgr_destroy(data.bufmgr);
> + display_fini(&data);
> + }
> +}
> diff --git a/tests/meson.build b/tests/meson.build
> index a2decf4ab..4cab294b8 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -64,6 +64,7 @@ test_progs = [
> 'kms_properties',
> 'kms_psr',
> 'kms_psr2_su',
> + 'kms_psr2_sf',
> 'kms_pwrite_crc',
> 'kms_rmfb',
> 'kms_rotation_crc',
And this igt test case is needed for testing this feature (
https://patchwork.freedesktop.org/series/84910/ )
when it comes to getting the latest revision of the kernel patch, I'll leave more comments which include the
test result.
Br,
G.G.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test
2020-12-16 10:50 ` Mun, Gwan-gyeong
@ 2020-12-21 4:44 ` Laxminarayan Bharadiya, Pankaj
2021-01-04 19:37 ` Mun, Gwan-gyeong
0 siblings, 1 reply; 12+ messages in thread
From: Laxminarayan Bharadiya, Pankaj @ 2020-12-21 4:44 UTC (permalink / raw)
To: Mun, Gwan-gyeong, igt-dev, Souza, Jose
> -----Original Message-----
> From: Mun, Gwan-gyeong <gwan-gyeong.mun@intel.com>
> Sent: 16 December 2020 16:21
> To: Laxminarayan Bharadiya, Pankaj
> <pankaj.laxminarayan.bharadiya@intel.com>; igt-dev@lists.freedesktop.org;
> Souza, Jose <jose.souza@intel.com>
> Subject: Re: [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test
>
> On Tue, 2020-12-08 at 22:31 +0530, Pankaj Bharadiya wrote:
> > Selective fetch reduces display engine use of memory bandwidth by only
> > fetching (reading from memory) the updated regions of the frame buffer
> > and sending those updated regions to a panel with a PSR2 capability.
> >
> > The FB_DAMAGE_CLIPS plane property provides user-space a way inform
> > kernel about the updated regions.
> >
> > Add new test to verify selective fetch by using FB_DAMAGE_CLIPS
> > property to send updated regions.
> >
> > changes since v1:
> > * alloc enough clips for all tests in stack and reuse (Jose)
> > * set damage clip along with draw, refactor code, rename
> > variables, etc (Jose)
> >
> > Signed-off-by: Pankaj Bharadiya <
> > pankaj.laxminarayan.bharadiya@intel.com>
> > ---
> > tests/Makefile.sources | 1 +
> > tests/kms_psr2_sf.c | 649
> > +++++++++++++++++++++++++++++++++++++++++
> > tests/meson.build | 1 +
> > 3 files changed, 651 insertions(+)
> > create mode 100644 tests/kms_psr2_sf.c
> >
> > diff --git a/tests/Makefile.sources b/tests/Makefile.sources index
> > 15fb56048..e7e399165 100644
> > --- a/tests/Makefile.sources
> > +++ b/tests/Makefile.sources
> > @@ -80,6 +80,7 @@ TESTS_progs = \
> > kms_properties \
> > kms_psr \
> > kms_psr2_su \
> > + kms_psr2_sf \
> > kms_pwrite_crc \
> > kms_rmfb \
> > kms_rotation_crc \
> > diff --git a/tests/kms_psr2_sf.c b/tests/kms_psr2_sf.c new file mode
> > 100644 index 000000000..296ed8476
> > --- /dev/null
> > +++ b/tests/kms_psr2_sf.c
> > @@ -0,0 +1,649 @@
> > +/*
> > + * Copyright © 2020 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.h"
> > +#include "igt_sysfs.h"
> > +#include "igt_psr.h"
> > +#include <errno.h>
> > +#include <stdbool.h>
> > +#include <stdio.h>
> > +#include <string.h>
> > +#include "intel_bufmgr.h"
> > +
> > +IGT_TEST_DESCRIPTION("Tests to varify PSR2 selective fetch by
> > sending multiple"
> > + " damaged areas");
> > +
> > +#define SQUARE_SIZE 100
> > +
> > +#define CUR_SIZE 64
> > +#define MAX_DAMAGE_AREAS 5
> > +
> > +enum operations {
> > + PLANE_UPDATE,
> > + PLANE_MOVE,
> > + OVERLAY_PRIM_UPDATE
> > +};
> > +
> Hi, can you also add use case which uses igt_fb_set_position()?
Plane_move test uses igt_fb_set_position(). Are you suggesting to
another new test apart from exisiting PLANE_MOVE test?
Will you please brief on how it should function?
I would like to get this patch reviewed and merged first.
Can add new tests once this patch gets merged?
>
> > +enum plane_move_postion {
> > + POS_TOP_LEFT,
> > + POS_TOP_RIGHT,
> > + POS_BOTTOM_LEFT,
> > + POS_BOTTOM_RIGHT
> > +};
> > +
> > +typedef struct {
> > + int drm_fd;
> > + int debugfs_fd;
> > + igt_display_t display;
> > + drm_intel_bufmgr *bufmgr;
> > + drmModeModeInfo *mode;
> > + igt_output_t *output;
> > + struct igt_fb fb_primary, fb_overlay, fb_cursor;
> > + struct igt_fb fb_test;
> > + int damage_area_count;
> > + struct drm_mode_rect plane_update_clip[MAX_DAMAGE_AREAS];
> > + struct drm_mode_rect plane_move_clip;
> > + struct drm_mode_rect cursor_clip;
> > + enum operations op;
> > + enum plane_move_postion pos;
> > + int test_plane_id;
> > + igt_plane_t *test_plane;
> > + cairo_t *cr;
> > +} data_t;
> > +
> > +static const char *op_str(enum operations op) {
> > + static const char * const name[] = {
> > + [PLANE_UPDATE] = "plane-update",
> > + [PLANE_MOVE] = "plane-move",
> > + [OVERLAY_PRIM_UPDATE] = "overlay-primary-update",
> > + };
> > +
> > + return name[op];
> > +}
> > +
> > +static void setup_output(data_t *data) {
> > + igt_display_t *display = &data->display;
> > + igt_output_t *output;
> > + enum pipe pipe;
> > +
> > + for_each_pipe_with_valid_output(display, pipe, output) {
> > + drmModeConnectorPtr c = output->config.connector;
> > +
> > + if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
> > + continue;
> > +
> > + igt_output_set_pipe(output, pipe);
> > + data->output = output;
> > + data->mode = igt_output_get_mode(output);
> > +
> > + return;
> > + }
> > +}
> > +
> > +static void display_init(data_t *data) {
> > + igt_display_require(&data->display, data->drm_fd);
> > + setup_output(data);
> > +}
> > +
> > +static void display_fini(data_t *data) {
> > + igt_display_fini(&data->display);
> > +}
> > +
> > +static void draw_rect(data_t *data, igt_fb_t *fb, int x, int y, int
> > w, int h,
> > + double r, double g, double b, double a) {
> > + cairo_t *cr;
> > +
> > + cr = igt_get_cairo_ctx(data->drm_fd, fb);
> > + igt_paint_color_alpha(cr, x, y, w, h, r, g, b, a);
> > + igt_put_cairo_ctx(cr);
> > +}
> > +
> > +static void set_clip(struct drm_mode_rect *clip, int x, int y, int
> > width,
> > + int height)
> > +{
> > + clip->x1 = x;
> > + clip->y1 = y;
> > + clip->x2 = x + width;
> > + clip->y2 = y + height;
> > +}
> > +
> > +static void plane_update_setup_squares(data_t *data, igt_fb_t *fb,
> > uint32_t h,
> > + uint32_t v)
> > +{
> > + int x, y;
> > + int width = SQUARE_SIZE;
> > + int height = SQUARE_SIZE;
> > +
> > + switch (data->damage_area_count) {
> > + case 5:
> > + /*Bottom right corner*/
> > + x = h - SQUARE_SIZE;
> > + y = v - SQUARE_SIZE;
> > +
> > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > 1.0);
> > + set_clip(&data->plane_update_clip[4], x, y, width,
> > height);
> > + case 4:
> > + /*Bottom left corner*/
> > + x = 0;
> > + y = v - SQUARE_SIZE;
> > +
> > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > 1.0);
> > + set_clip(&data->plane_update_clip[3], x, y, width,
> > height);
> > + case 3:
> > + /*Top right corner*/
> > + x = h - SQUARE_SIZE;
> > + y = 0;
> > +
> > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > 1.0);
> > + set_clip(&data->plane_update_clip[2], x, y, width,
> > height);
> > + case 2:
> > + /*Top left corner*/
> > + x = 0;
> > + y = 0;
> > +
> > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > 1.0);
> > + set_clip(&data->plane_update_clip[1], x, y, width,
> > height);
> > + case 1:
> > + /*Center*/
> > + x = h/2 - SQUARE_SIZE/2;
> > + y = v/2 - SQUARE_SIZE/2;
> > +
> > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > 1.0);
> > + set_clip(&data->plane_update_clip[0], x, y, width,
> > height);
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +}
> > +
> > +static void plane_move_setup_square(data_t *data, igt_fb_t *fb,
> > uint32_t h,
> > + uint32_t v)
> > +{
> > + int x = 0, y = 0;
> > +
> > + switch (data->pos) {
> > + case POS_TOP_LEFT:
> > + /*Bottom right corner*/
> it seems that the comments do not match enum name.
Yes, because as per design, I am painting square on the opposite
corner of the plane position.
> > + x = h - SQUARE_SIZE;
> > + y = v - SQUARE_SIZE;
> > + break;
> > + case POS_TOP_RIGHT:
> > + /*Bottom left corner*/
> > + x = 0;
> > + y = v - SQUARE_SIZE;
> > + break;
> > + case POS_BOTTOM_LEFT:
> > + /*Top right corner*/
> > + x = h - SQUARE_SIZE;
> > + y = 0;
> > + break;
> > + case POS_BOTTOM_RIGHT:
> > + /*Top left corner*/
> > + x = 0;
> > + y = 0;
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +
> > + draw_rect(data, fb, x, y,
> > + SQUARE_SIZE, SQUARE_SIZE, 1.0, 1.0, 1.0, 1.0);
> > + set_clip(&data->plane_move_clip, x, y, SQUARE_SIZE,
> > SQUARE_SIZE);
> > +}
> > +
> > +static void prepare(data_t *data)
> > +{
> > + igt_plane_t *primary, *sprite = NULL, *cursor = NULL;
> > +
> > + /* all green frame */
> > + igt_create_color_fb(data->drm_fd,
> > + data->mode->hdisplay, data->mode->vdisplay,
> > + DRM_FORMAT_XRGB8888,
> > + LOCAL_DRM_FORMAT_MOD_NONE,
> > + 0.0, 1.0, 0.0,
> > + &data->fb_primary);
> > +
> > + primary = igt_output_get_plane_type(data->output,
> > + DRM_PLANE_TYPE_PRIMARY);
> > +
> > + switch (data->test_plane_id) {
> > + case DRM_PLANE_TYPE_OVERLAY:
> > + sprite = igt_output_get_plane_type(data->output,
> > + DRM_PLANE_TYPE_OVERL
> > AY);
> > + /*All blue plane*/
> > + igt_create_color_fb(data->drm_fd,
> > + data->mode->hdisplay/2,
> > + data->mode->vdisplay/2,
> > + DRM_FORMAT_XRGB8888,
> > + LOCAL_DRM_FORMAT_MOD_NONE,
> > + 0.0, 0.0, 1.0,
> > + &data->fb_overlay);
> > +
> > + igt_create_color_fb(data->drm_fd,
> > + data->mode->hdisplay/2,
> > + data->mode->vdisplay/2,
> > + DRM_FORMAT_XRGB8888,
> > + LOCAL_DRM_FORMAT_MOD_NONE,
> > + 0.0, 0.0, 1.0,
> > + &data->fb_test);
> > +
> > + if (data->op == PLANE_MOVE) {
> > + plane_move_setup_square(data, &data->fb_test,
> > + data->mode->hdisplay/2,
> > + data->mode->vdisplay/2);
> > +
> > + } else {
> > + plane_update_setup_squares(data, &data-
> > >fb_test,
> > + data->mode->hdisplay/2,
> > + data->mode->vdisplay/2);
> > + }
> > +
> > + igt_plane_set_fb(sprite, &data->fb_overlay);
> > + data->test_plane = sprite;
> > + break;
> > +
> > + case DRM_PLANE_TYPE_PRIMARY:
> > + igt_create_color_fb(data->drm_fd,
> > + data->mode->hdisplay, data->mode->vdisplay,
> > + DRM_FORMAT_XRGB8888,
> > + LOCAL_DRM_FORMAT_MOD_NONE,
> > + 0.0, 1.0, 0.0,
> > + &data->fb_test);
> > +
> > + plane_update_setup_squares(data, &data->fb_test,
> > + data->mode->hdisplay,
> > + data->mode->vdisplay);
> > + data->test_plane = primary;
> > +
> > + if (data->op == OVERLAY_PRIM_UPDATE) {
> > + sprite = igt_output_get_plane_type(data-
> > >output,
> > + DRM_PLANE_TYPE_OVERL
> > AY);
> > +
> > + igt_create_color_fb(data->drm_fd,
> > + data->mode->hdisplay,
> > + data->mode->vdisplay,
> > + DRM_FORMAT_XRGB8888,
> > + LOCAL_DRM_FORMAT_MOD_NONE,
> > + 0.0, 0.0, 1.0,
> > + &data->fb_overlay);
> > +
> > + igt_plane_set_fb(sprite, &data->fb_overlay);
> > + igt_plane_set_prop_value(sprite,
> > IGT_PLANE_ALPHA,
> > + 0x6060);
> > + }
> > + break;
> > +
> > + case DRM_PLANE_TYPE_CURSOR:
> > + cursor = igt_output_get_plane_type(data->output,
> > + DRM_PLANE_TYPE_CURSO
> > R);
> > + igt_plane_set_position(cursor, 0, 0);
> > +
> > + igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
> > + DRM_FORMAT_ARGB8888,
> > LOCAL_DRM_FORMAT_MOD_NONE,
> > + &data->fb_cursor);
> > +
> > + draw_rect(data, &data->fb_cursor, 0, 0, CUR_SIZE,
> > CUR_SIZE,
> > + 0.0, 0.0, 1.0, 1.0);
> > +
> > + igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
> > + DRM_FORMAT_ARGB8888,
> > LOCAL_DRM_FORMAT_MOD_NONE,
> > + &data->fb_test);
> > +
> > + draw_rect(data, &data->fb_test, 0, 0, CUR_SIZE,
> > CUR_SIZE,
> > + 1.0, 1.0, 1.0, 1.0);
> > +
> > + set_clip(&data->cursor_clip, 0, 0, CUR_SIZE, CUR_SIZE);
> > + igt_plane_set_fb(cursor, &data->fb_cursor);
> > + data->test_plane = cursor;
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +
> > + igt_plane_set_fb(primary, &data->fb_primary);
> > +
> > + igt_display_commit2(&data->display, COMMIT_ATOMIC); }
> > +
> > +static inline void manual(const char *expected) {
> > + igt_debug_manual_check("all", expected); }
> > +
> > +static void plane_update_expected_output(int plane_type, int
> > box_count)
> > +{
> > + char expected[64] = {};
> > +
> > + switch (plane_type) {
> > + case DRM_PLANE_TYPE_PRIMARY:
> > + sprintf(expected, "screen Green with %d White box(es)",
> > + box_count);
> > + break;
> > + case DRM_PLANE_TYPE_OVERLAY:
> > + sprintf(expected,
> > + "screen Green with Blue box and %d White
> > box(es)",
> > + box_count);
> > + break;
> > + case DRM_PLANE_TYPE_CURSOR:
> > + sprintf(expected, "screen Green with %d White box(es)",
> > + box_count);
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +
> > + manual(expected);
> > +}
> > +
> > +static void plane_move_expected_output(enum plane_move_postion pos) {
> > + char expected[64] = {};
> > +
> > + switch (pos) {
> > + case POS_TOP_LEFT:
> > + sprintf(expected,
> > + "screen Green with Blue box on top left corner
> > and White box");
> > + break;
> > + case POS_TOP_RIGHT:
> > + sprintf(expected,
> > + "screen Green with Blue box on top right corner
> > and White box");
> > + break;
> > + case POS_BOTTOM_LEFT:
> > + sprintf(expected,
> > + "screen Green with Blue box on bottom left
> > corner and White box");
> > + break;
> > + case POS_BOTTOM_RIGHT:
> > + sprintf(expected,
> > + "screen Green with Blue box on bottom right
> > corner and White box");
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +
> > + manual(expected);
> > +}
> > +
> > +static void overlay_prim_update_expected_output(int box_count) {
> > + char expected[64] = {};
> > +
> > + sprintf(expected,
> > + "screen Green with Blue overlay, %d light Blue
> > box(es)",
> > + box_count);
> > +
> > + manual(expected);
> > +
> > +}
> > +
> > +static void expected_output(data_t *data) {
> > + switch (data->op) {
> > + case PLANE_MOVE:
> > + plane_move_expected_output(data->pos);
> > + break;
> > + case PLANE_UPDATE:
> > + plane_update_expected_output(data->test_plane_id,
> > + data->damage_area_count);
> > + break;
> > + case OVERLAY_PRIM_UPDATE:
> > + overlay_prim_update_expected_output(data-
> > >damage_area_count);
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +}
> > +
> > +static void damaged_plane_move(data_t *data) {
> > + igt_plane_t *test_plane = data->test_plane;
> > + uint32_t h = data->mode->hdisplay;
> > + uint32_t v = data->mode->vdisplay;
> > +
> > + igt_plane_set_fb(test_plane, &data->fb_test);
> > +
> > + if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
> > + h = h/2;
> > + v = v/2;
> > + }
> > +
> > + igt_plane_replace_prop_blob(test_plane,
> > IGT_PLANE_FB_DAMAGE_CLIPS,
> > + &data->plane_move_clip,
> > + sizeof(struct drm_mode_rect));
> > +
> > + switch (data->pos) {
> > + case POS_TOP_LEFT:
> > + igt_plane_set_position(data->test_plane, 0, 0);
> > + break;
> > + case POS_TOP_RIGHT:
> > + igt_plane_set_position(data->test_plane,
> > + data->mode->hdisplay/2, 0);
> > + break;
> > + case POS_BOTTOM_LEFT:
> > + igt_plane_set_position(data->test_plane, 0,
> > + data->mode->vdisplay/2);
> > + break;
> > + case POS_BOTTOM_RIGHT:
> > + igt_plane_set_position(data->test_plane,
> > + data->mode->hdisplay/2,
> > + data->mode->vdisplay/2);
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +
> > + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> > +
> > + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> > +
> > + expected_output(data);
> > +}
> > +
> > +static void damaged_plane_update(data_t *data) {
> > + igt_plane_t *test_plane = data->test_plane;
> > + uint32_t h = data->mode->hdisplay;
> > + uint32_t v = data->mode->vdisplay;
> > +
> > + igt_plane_set_fb(test_plane, &data->fb_test);
> > +
> > + if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
> > + h = h/2;
> > + v = v/2;
> > + }
> > +
> > + if (data->test_plane_id == DRM_PLANE_TYPE_CURSOR)
> > + igt_plane_replace_prop_blob(test_plane,
> > + IGT_PLANE_FB_DAMAGE_CLIPS,
> > + &data->cursor_clip,
> > + sizeof(struct
> > drm_mode_rect));
> > + else
> > + igt_plane_replace_prop_blob(test_plane,
> > + IGT_PLANE_FB_DAMAGE_CLIPS,
> > + &data->plane_update_clip,
> > + sizeof(struct
> > drm_mode_rect)*
> > + data->damage_area_count);
> > +
> > + igt_plane_set_position(data->test_plane, 0, 0);
> > + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> > +
> > + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> > +
> > + expected_output(data);
> > +}
> > +
> > +static void run(data_t *data)
> > +{
> > + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> > +
> > + switch (data->op) {
> > + case PLANE_UPDATE:
> > + case OVERLAY_PRIM_UPDATE:
> > + damaged_plane_update(data);
> > + break;
> > + case PLANE_MOVE:
> > + damaged_plane_move(data);
> > + break;
> > + default:
> > + igt_assert(false);
> > + }
> > +}
> > +
> > +static void cleanup(data_t *data)
> > +{
> > + igt_plane_t *primary;
> > + igt_plane_t *sprite;
> > +
> > + primary = igt_output_get_plane_type(data->output,
> > + DRM_PLANE_TYPE_PRIMARY);
> > +
> > + igt_plane_set_fb(primary, NULL);
> > +
> > + if (data->test_plane_id != DRM_PLANE_TYPE_PRIMARY) {
> > + igt_plane_set_position(data->test_plane, 0, 0);
> > + igt_plane_set_fb(data->test_plane, NULL);
> > + }
> > +
> > + if (data->op == OVERLAY_PRIM_UPDATE) {
> > + sprite = igt_output_get_plane_type(data->output,
> > + DRM_PLANE_TYPE_OVERLAY);
> > + igt_plane_set_position(sprite, 0, 0);
> > + igt_plane_set_fb(sprite, NULL);
> > + }
> > +
> > + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> > +
> > + igt_remove_fb(data->drm_fd, &data->fb_primary);
> > + igt_remove_fb(data->drm_fd, &data->fb_overlay);
> > + igt_remove_fb(data->drm_fd, &data->fb_cursor);
> > + igt_remove_fb(data->drm_fd, &data->fb_test); }
> > +
> > +igt_main
> > +{
> > + data_t data = {};
> > + int i;
> > +
> > + igt_fixture {
> > + int r;
> > +
> > + data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
> > + data.debugfs_fd = igt_debugfs_dir(data.drm_fd);
> > + kmstest_set_vt_graphics_mode();
> > +
> > + igt_require_f(psr_sink_support(data.drm_fd,
> > + data.debugfs_fd,
> > PSR_MODE_2),
> > + "Sink does not support PSR2\n");
> > +
> > + igt_require_f(psr2_selective_fetch_check(data.debugfs_f
> > d),
> > + "PSR2 selective fetch not enabled\n");
> > +
> > + data.bufmgr = drm_intel_bufmgr_gem_init(data.drm_fd,
> > 4096);
> > + igt_assert(data.bufmgr);
> > + drm_intel_bufmgr_gem_enable_reuse(data.bufmgr);
> > +
> > + display_init(&data);
> > +
> > + /* Test if PSR2 can be enabled */
> > + igt_require_f(psr_enable(data.drm_fd,
> > + data.debugfs_fd, PSR_MODE_2),
> > + "Error enabling PSR2\n");
> > +
> > + data.damage_area_count = MAX_DAMAGE_AREAS;
> > + data.op = PLANE_UPDATE;
> > + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> > + prepare(&data);
> > + r = psr_wait_entry(data.debugfs_fd, PSR_MODE_2);
> > + cleanup(&data);
> > + if (!r)
> > + psr_print_debugfs(data.debugfs_fd);
> > + igt_require_f(r, "PSR2 can not be enabled\n");
> > + }
> > +
> > + /* Verify primary plane selective fetch */
> > + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> > + igt_subtest_f("primary-%s-sf-dmg-area-%d",
> > op_str(data.op), i) {
> > + data.damage_area_count = i;
> > + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> > + prepare(&data);
> > + run(&data);
> > + cleanup(&data);
> > + }
> > + }
> > +
> > + /* Verify overlay plane selective fetch */
> > + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> > + igt_subtest_f("overlay-%s-sf-dmg-area-%d",
> > op_str(data.op), i) {
> > + data.damage_area_count = i;
> > + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> > + prepare(&data);
> > + run(&data);
> > + cleanup(&data);
> > + }
> > + }
> > +
> > + /* Verify overlay plane selective fetch */
> > + igt_subtest_f("cursor-%s-sf", op_str(data.op)) {
> > + data.damage_area_count = 1;
> > + data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> > + prepare(&data);
> > + run(&data);
> > + cleanup(&data);
> > + }
> > +
> > + /* Only for overlay plane */
> > + data.op = PLANE_MOVE;
> > + /* Verify overlay plane move selective fetch */
> > + for (i = POS_TOP_LEFT; i <= POS_BOTTOM_RIGHT ; i++) {
> > + igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i)
> > {
> > + data.pos = i;
> > + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> > + prepare(&data);
> > + run(&data);
> > + cleanup(&data);
> > + }
> > + }
> > +
> > + /* Verify primary plane selective fetch with overplay plane
> > blended */
> > + data.op = OVERLAY_PRIM_UPDATE;
> > + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> > + igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i)
> > {
> > + data.damage_area_count = i;
> > + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> > + prepare(&data);
> > + run(&data);
> > + cleanup(&data);
> > + }
> > + }
> > +
> > + igt_fixture {
> > + close(data.debugfs_fd);
> > + drm_intel_bufmgr_destroy(data.bufmgr);
> > + display_fini(&data);
> > + }
> > +}
> > diff --git a/tests/meson.build b/tests/meson.build index
> > a2decf4ab..4cab294b8 100644
> > --- a/tests/meson.build
> > +++ b/tests/meson.build
> > @@ -64,6 +64,7 @@ test_progs = [
> > 'kms_properties',
> > 'kms_psr',
> > 'kms_psr2_su',
> > + 'kms_psr2_sf',
> > 'kms_pwrite_crc',
> > 'kms_rmfb',
> > 'kms_rotation_crc',
>
> And this igt test case is needed for testing this feature (
> https://patchwork.freedesktop.org/series/84910/ ) when it comes to getting the
> latest revision of the kernel patch, I'll leave more comments which include the
> test result.
Ok.
Thanks,
Pankaj
>
> Br,
> G.G.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test
2020-12-21 4:44 ` Laxminarayan Bharadiya, Pankaj
@ 2021-01-04 19:37 ` Mun, Gwan-gyeong
0 siblings, 0 replies; 12+ messages in thread
From: Mun, Gwan-gyeong @ 2021-01-04 19:37 UTC (permalink / raw)
To: Laxminarayan Bharadiya, Pankaj, igt-dev, Souza, Jose
On Mon, 2020-12-21 at 10:14 +0530, Laxminarayan Bharadiya, Pankaj
wrote:
> > -----Original Message-----
> > From: Mun, Gwan-gyeong <gwan-gyeong.mun@intel.com>
> > Sent: 16 December 2020 16:21
> > To: Laxminarayan Bharadiya, Pankaj
> > <pankaj.laxminarayan.bharadiya@intel.com>;
> > igt-dev@lists.freedesktop.org;
> > Souza, Jose <jose.souza@intel.com>
> > Subject: Re: [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch
> > test
> >
> > On Tue, 2020-12-08 at 22:31 +0530, Pankaj Bharadiya wrote:
> > > Selective fetch reduces display engine use of memory bandwidth by
> > > only
> > > fetching (reading from memory) the updated regions of the frame
> > > buffer
> > > and sending those updated regions to a panel with a PSR2
> > > capability.
> > >
> > > The FB_DAMAGE_CLIPS plane property provides user-space a way
> > > inform
> > > kernel about the updated regions.
> > >
> > > Add new test to verify selective fetch by using FB_DAMAGE_CLIPS
> > > property to send updated regions.
> > >
> > > changes since v1:
> > > * alloc enough clips for all tests in stack and reuse (Jose)
> > > * set damage clip along with draw, refactor code, rename
> > > variables, etc (Jose)
> > >
> > > Signed-off-by: Pankaj Bharadiya <
> > > pankaj.laxminarayan.bharadiya@intel.com>
> > > ---
> > > tests/Makefile.sources | 1 +
> > > tests/kms_psr2_sf.c | 649
> > > +++++++++++++++++++++++++++++++++++++++++
> > > tests/meson.build | 1 +
> > > 3 files changed, 651 insertions(+)
> > > create mode 100644 tests/kms_psr2_sf.c
> > >
> > > diff --git a/tests/Makefile.sources b/tests/Makefile.sources
> > > index
> > > 15fb56048..e7e399165 100644
> > > --- a/tests/Makefile.sources
> > > +++ b/tests/Makefile.sources
> > > @@ -80,6 +80,7 @@ TESTS_progs = \
> > > kms_properties \
> > > kms_psr \
> > > kms_psr2_su \
> > > + kms_psr2_sf \
> > > kms_pwrite_crc \
> > > kms_rmfb \
> > > kms_rotation_crc \
> > > diff --git a/tests/kms_psr2_sf.c b/tests/kms_psr2_sf.c new file
> > > mode
> > > 100644 index 000000000..296ed8476
> > > --- /dev/null
> > > +++ b/tests/kms_psr2_sf.c
> > > @@ -0,0 +1,649 @@
> > > +/*
> > > + * Copyright © 2020 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.h"
> > > +#include "igt_sysfs.h"
> > > +#include "igt_psr.h"
> > > +#include <errno.h>
> > > +#include <stdbool.h>
> > > +#include <stdio.h>
> > > +#include <string.h>
> > > +#include "intel_bufmgr.h"
> > > +
> > > +IGT_TEST_DESCRIPTION("Tests to varify PSR2 selective fetch by
> > > sending multiple"
> > > + " damaged areas");
> > > +
> > > +#define SQUARE_SIZE 100
> > > +
> > > +#define CUR_SIZE 64
> > > +#define MAX_DAMAGE_AREAS 5
> > > +
> > > +enum operations {
> > > + PLANE_UPDATE,
> > > + PLANE_MOVE,
> > > + OVERLAY_PRIM_UPDATE
> > > +};
> > > +
> > Hi, can you also add use case which uses igt_fb_set_position()?
>
> Plane_move test uses igt_fb_set_position(). Are you suggesting to
> another new test apart from exisiting PLANE_MOVE test?
> Will you please brief on how it should function?
>
current implementation implies framebuffer position to 0,0.
for testing framebuffer move and damage update, we also need to test
with specific x,y position of igt_fb_set_position().
> I would like to get this patch reviewed and merged first.
> Can add new tests once this patch gets merged?
>
okay.
> > > +enum plane_move_postion {
> > > + POS_TOP_LEFT,
> > > + POS_TOP_RIGHT,
> > > + POS_BOTTOM_LEFT,
> > > + POS_BOTTOM_RIGHT
> > > +};
> > > +
> > > +typedef struct {
> > > + int drm_fd;
> > > + int debugfs_fd;
> > > + igt_display_t display;
> > > + drm_intel_bufmgr *bufmgr;
> > > + drmModeModeInfo *mode;
> > > + igt_output_t *output;
> > > + struct igt_fb fb_primary, fb_overlay, fb_cursor;
> > > + struct igt_fb fb_test;
> > > + int damage_area_count;
> > > + struct drm_mode_rect plane_update_clip[MAX_DAMAGE_AREAS];
> > > + struct drm_mode_rect plane_move_clip;
> > > + struct drm_mode_rect cursor_clip;
> > > + enum operations op;
> > > + enum plane_move_postion pos;
> > > + int test_plane_id;
> > > + igt_plane_t *test_plane;
> > > + cairo_t *cr;
> > > +} data_t;
> > > +
> > > +static const char *op_str(enum operations op) {
> > > + static const char * const name[] = {
> > > + [PLANE_UPDATE] = "plane-update",
> > > + [PLANE_MOVE] = "plane-move",
> > > + [OVERLAY_PRIM_UPDATE] = "overlay-primary-update",
> > > + };
> > > +
> > > + return name[op];
> > > +}
> > > +
> > > +static void setup_output(data_t *data) {
> > > + igt_display_t *display = &data->display;
> > > + igt_output_t *output;
> > > + enum pipe pipe;
> > > +
> > > + for_each_pipe_with_valid_output(display, pipe, output) {
> > > + drmModeConnectorPtr c = output->config.connector;
> > > +
> > > + if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
> > > + continue;
> > > +
> > > + igt_output_set_pipe(output, pipe);
> > > + data->output = output;
> > > + data->mode = igt_output_get_mode(output);
> > > +
> > > + return;
> > > + }
> > > +}
> > > +
> > > +static void display_init(data_t *data) {
> > > + igt_display_require(&data->display, data->drm_fd);
> > > + setup_output(data);
> > > +}
> > > +
> > > +static void display_fini(data_t *data) {
> > > + igt_display_fini(&data->display);
> > > +}
> > > +
> > > +static void draw_rect(data_t *data, igt_fb_t *fb, int x, int y,
> > > int
> > > w, int h,
> > > + double r, double g, double b, double a) {
> > > + cairo_t *cr;
> > > +
> > > + cr = igt_get_cairo_ctx(data->drm_fd, fb);
> > > + igt_paint_color_alpha(cr, x, y, w, h, r, g, b, a);
> > > + igt_put_cairo_ctx(cr);
> > > +}
> > > +
> > > +static void set_clip(struct drm_mode_rect *clip, int x, int y,
> > > int
> > > width,
> > > + int height)
> > > +{
> > > + clip->x1 = x;
> > > + clip->y1 = y;
> > > + clip->x2 = x + width;
> > > + clip->y2 = y + height;
> > > +}
> > > +
> > > +static void plane_update_setup_squares(data_t *data, igt_fb_t
> > > *fb,
> > > uint32_t h,
> > > + uint32_t v)
> > > +{
> > > + int x, y;
> > > + int width = SQUARE_SIZE;
> > > + int height = SQUARE_SIZE;
> > > +
> > > + switch (data->damage_area_count) {
> > > + case 5:
> > > + /*Bottom right corner*/
> > > + x = h - SQUARE_SIZE;
> > > + y = v - SQUARE_SIZE;
> > > +
> > > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > > 1.0);
> > > + set_clip(&data->plane_update_clip[4], x, y, width,
> > > height);
> > > + case 4:
> > > + /*Bottom left corner*/
> > > + x = 0;
> > > + y = v - SQUARE_SIZE;
> > > +
> > > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > > 1.0);
> > > + set_clip(&data->plane_update_clip[3], x, y, width,
> > > height);
> > > + case 3:
> > > + /*Top right corner*/
> > > + x = h - SQUARE_SIZE;
> > > + y = 0;
> > > +
> > > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > > 1.0);
> > > + set_clip(&data->plane_update_clip[2], x, y, width,
> > > height);
> > > + case 2:
> > > + /*Top left corner*/
> > > + x = 0;
> > > + y = 0;
> > > +
> > > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > > 1.0);
> > > + set_clip(&data->plane_update_clip[1], x, y, width,
> > > height);
> > > + case 1:
> > > + /*Center*/
> > > + x = h/2 - SQUARE_SIZE/2;
> > > + y = v/2 - SQUARE_SIZE/2;
> > > +
> > > + draw_rect(data, fb, x, y, width, height, 1.0, 1.0, 1.0,
> > > 1.0);
> > > + set_clip(&data->plane_update_clip[0], x, y, width,
> > > height);
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +}
> > > +
> > > +static void plane_move_setup_square(data_t *data, igt_fb_t *fb,
> > > uint32_t h,
> > > + uint32_t v)
> > > +{
> > > + int x = 0, y = 0;
> > > +
> > > + switch (data->pos) {
> > > + case POS_TOP_LEFT:
> > > + /*Bottom right corner*/
> > it seems that the comments do not match enum name.
>
> Yes, because as per design, I am painting square on the opposite
> corner of the plane position.
>
> > > + x = h - SQUARE_SIZE;
> > > + y = v - SQUARE_SIZE;
> > > + break;
> > > + case POS_TOP_RIGHT:
> > > + /*Bottom left corner*/
> > > + x = 0;
> > > + y = v - SQUARE_SIZE;
> > > + break;
> > > + case POS_BOTTOM_LEFT:
> > > + /*Top right corner*/
> > > + x = h - SQUARE_SIZE;
> > > + y = 0;
> > > + break;
> > > + case POS_BOTTOM_RIGHT:
> > > + /*Top left corner*/
> > > + x = 0;
> > > + y = 0;
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +
> > > + draw_rect(data, fb, x, y,
> > > + SQUARE_SIZE, SQUARE_SIZE, 1.0, 1.0, 1.0, 1.0);
> > > + set_clip(&data->plane_move_clip, x, y, SQUARE_SIZE,
> > > SQUARE_SIZE);
> > > +}
> > > +
> > > +static void prepare(data_t *data)
> > > +{
> > > + igt_plane_t *primary, *sprite = NULL, *cursor = NULL;
> > > +
> > > + /* all green frame */
> > > + igt_create_color_fb(data->drm_fd,
> > > + data->mode->hdisplay, data->mode->vdisplay,
> > > + DRM_FORMAT_XRGB8888,
> > > + LOCAL_DRM_FORMAT_MOD_NONE,
> > > + 0.0, 1.0, 0.0,
> > > + &data->fb_primary);
> > > +
> > > + primary = igt_output_get_plane_type(data->output,
> > > + DRM_PLANE_TYPE_PRIMARY);
> > > +
> > > + switch (data->test_plane_id) {
> > > + case DRM_PLANE_TYPE_OVERLAY:
> > > + sprite = igt_output_get_plane_type(data->output,
> > > + DRM_PLANE_TYPE_OVERL
> > > AY);
> > > + /*All blue plane*/
> > > + igt_create_color_fb(data->drm_fd,
> > > + data->mode->hdisplay/2,
> > > + data->mode->vdisplay/2,
> > > + DRM_FORMAT_XRGB8888,
> > > + LOCAL_DRM_FORMAT_MOD_NONE,
> > > + 0.0, 0.0, 1.0,
> > > + &data->fb_overlay);
> > > +
> > > + igt_create_color_fb(data->drm_fd,
> > > + data->mode->hdisplay/2,
> > > + data->mode->vdisplay/2,
> > > + DRM_FORMAT_XRGB8888,
> > > + LOCAL_DRM_FORMAT_MOD_NONE,
> > > + 0.0, 0.0, 1.0,
> > > + &data->fb_test);
> > > +
> > > + if (data->op == PLANE_MOVE) {
> > > + plane_move_setup_square(data, &data->fb_test,
> > > + data->mode->hdisplay/2,
> > > + data->mode->vdisplay/2);
> > > +
> > > + } else {
> > > + plane_update_setup_squares(data, &data-
> > > > fb_test,
> > > + data->mode->hdisplay/2,
> > > + data->mode->vdisplay/2);
> > > + }
> > > +
> > > + igt_plane_set_fb(sprite, &data->fb_overlay);
> > > + data->test_plane = sprite;
> > > + break;
> > > +
> > > + case DRM_PLANE_TYPE_PRIMARY:
> > > + igt_create_color_fb(data->drm_fd,
> > > + data->mode->hdisplay, data->mode->vdisplay,
> > > + DRM_FORMAT_XRGB8888,
> > > + LOCAL_DRM_FORMAT_MOD_NONE,
> > > + 0.0, 1.0, 0.0,
> > > + &data->fb_test);
> > > +
> > > + plane_update_setup_squares(data, &data->fb_test,
> > > + data->mode->hdisplay,
> > > + data->mode->vdisplay);
> > > + data->test_plane = primary;
> > > +
> > > + if (data->op == OVERLAY_PRIM_UPDATE) {
> > > + sprite = igt_output_get_plane_type(data-
> > > > output,
> > > + DRM_PLANE_TYPE_OVERL
> > > AY);
> > > +
> > > + igt_create_color_fb(data->drm_fd,
> > > + data->mode->hdisplay,
> > > + data->mode->vdisplay,
> > > + DRM_FORMAT_XRGB8888,
> > > + LOCAL_DRM_FORMAT_MOD_NONE,
> > > + 0.0, 0.0, 1.0,
> > > + &data->fb_overlay);
> > > +
> > > + igt_plane_set_fb(sprite, &data->fb_overlay);
> > > + igt_plane_set_prop_value(sprite,
> > > IGT_PLANE_ALPHA,
> > > + 0x6060);
> > > + }
> > > + break;
> > > +
> > > + case DRM_PLANE_TYPE_CURSOR:
> > > + cursor = igt_output_get_plane_type(data->output,
> > > + DRM_PLANE_TYPE_CURSO
> > > R);
> > > + igt_plane_set_position(cursor, 0, 0);
> > > +
> > > + igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
> > > + DRM_FORMAT_ARGB8888,
> > > LOCAL_DRM_FORMAT_MOD_NONE,
> > > + &data->fb_cursor);
> > > +
> > > + draw_rect(data, &data->fb_cursor, 0, 0, CUR_SIZE,
> > > CUR_SIZE,
> > > + 0.0, 0.0, 1.0, 1.0);
> > > +
> > > + igt_create_fb(data->drm_fd, CUR_SIZE, CUR_SIZE,
> > > + DRM_FORMAT_ARGB8888,
> > > LOCAL_DRM_FORMAT_MOD_NONE,
> > > + &data->fb_test);
> > > +
> > > + draw_rect(data, &data->fb_test, 0, 0, CUR_SIZE,
> > > CUR_SIZE,
> > > + 1.0, 1.0, 1.0, 1.0);
> > > +
> > > + set_clip(&data->cursor_clip, 0, 0, CUR_SIZE, CUR_SIZE);
> > > + igt_plane_set_fb(cursor, &data->fb_cursor);
> > > + data->test_plane = cursor;
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +
> > > + igt_plane_set_fb(primary, &data->fb_primary);
> > > +
> > > + igt_display_commit2(&data->display, COMMIT_ATOMIC); }
> > > +
> > > +static inline void manual(const char *expected) {
> > > + igt_debug_manual_check("all", expected); }
> > > +
> > > +static void plane_update_expected_output(int plane_type, int
> > > box_count)
> > > +{
> > > + char expected[64] = {};
> > > +
> > > + switch (plane_type) {
> > > + case DRM_PLANE_TYPE_PRIMARY:
> > > + sprintf(expected, "screen Green with %d White box(es)",
> > > + box_count);
> > > + break;
> > > + case DRM_PLANE_TYPE_OVERLAY:
> > > + sprintf(expected,
> > > + "screen Green with Blue box and %d White
> > > box(es)",
> > > + box_count);
> > > + break;
> > > + case DRM_PLANE_TYPE_CURSOR:
> > > + sprintf(expected, "screen Green with %d White box(es)",
> > > + box_count);
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +
> > > + manual(expected);
> > > +}
> > > +
> > > +static void plane_move_expected_output(enum plane_move_postion
> > > pos) {
> > > + char expected[64] = {};
> > > +
> > > + switch (pos) {
> > > + case POS_TOP_LEFT:
> > > + sprintf(expected,
> > > + "screen Green with Blue box on top left corner
> > > and White box");
> > > + break;
> > > + case POS_TOP_RIGHT:
> > > + sprintf(expected,
> > > + "screen Green with Blue box on top right corner
> > > and White box");
> > > + break;
> > > + case POS_BOTTOM_LEFT:
> > > + sprintf(expected,
> > > + "screen Green with Blue box on bottom left
> > > corner and White box");
> > > + break;
> > > + case POS_BOTTOM_RIGHT:
> > > + sprintf(expected,
> > > + "screen Green with Blue box on bottom right
> > > corner and White box");
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +
> > > + manual(expected);
> > > +}
> > > +
> > > +static void overlay_prim_update_expected_output(int box_count) {
> > > + char expected[64] = {};
> > > +
> > > + sprintf(expected,
> > > + "screen Green with Blue overlay, %d light Blue
> > > box(es)",
> > > + box_count);
> > > +
> > > + manual(expected);
> > > +
> > > +}
> > > +
> > > +static void expected_output(data_t *data) {
> > > + switch (data->op) {
> > > + case PLANE_MOVE:
> > > + plane_move_expected_output(data->pos);
> > > + break;
> > > + case PLANE_UPDATE:
> > > + plane_update_expected_output(data->test_plane_id,
> > > + data->damage_area_count);
> > > + break;
> > > + case OVERLAY_PRIM_UPDATE:
> > > + overlay_prim_update_expected_output(data-
> > > > damage_area_count);
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +}
> > > +
> > > +static void damaged_plane_move(data_t *data) {
> > > + igt_plane_t *test_plane = data->test_plane;
> > > + uint32_t h = data->mode->hdisplay;
> > > + uint32_t v = data->mode->vdisplay;
> > > +
> > > + igt_plane_set_fb(test_plane, &data->fb_test);
> > > +
> > > + if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
> > > + h = h/2;
> > > + v = v/2;
> > > + }
> > > +
> > > + igt_plane_replace_prop_blob(test_plane,
> > > IGT_PLANE_FB_DAMAGE_CLIPS,
> > > + &data->plane_move_clip,
> > > + sizeof(struct drm_mode_rect));
> > > +
> > > + switch (data->pos) {
> > > + case POS_TOP_LEFT:
> > > + igt_plane_set_position(data->test_plane, 0, 0);
> > > + break;
> > > + case POS_TOP_RIGHT:
> > > + igt_plane_set_position(data->test_plane,
> > > + data->mode->hdisplay/2, 0);
> > > + break;
> > > + case POS_BOTTOM_LEFT:
> > > + igt_plane_set_position(data->test_plane, 0,
> > > + data->mode->vdisplay/2);
> > > + break;
> > > + case POS_BOTTOM_RIGHT:
> > > + igt_plane_set_position(data->test_plane,
> > > + data->mode->hdisplay/2,
> > > + data->mode->vdisplay/2);
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +
> > > + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> > > +
> > > + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> > > +
> > > + expected_output(data);
> > > +}
> > > +
> > > +static void damaged_plane_update(data_t *data) {
> > > + igt_plane_t *test_plane = data->test_plane;
> > > + uint32_t h = data->mode->hdisplay;
> > > + uint32_t v = data->mode->vdisplay;
> > > +
> > > + igt_plane_set_fb(test_plane, &data->fb_test);
> > > +
> > > + if (data->test_plane_id == DRM_PLANE_TYPE_OVERLAY) {
> > > + h = h/2;
> > > + v = v/2;
> > > + }
> > > +
> > > + if (data->test_plane_id == DRM_PLANE_TYPE_CURSOR)
> > > + igt_plane_replace_prop_blob(test_plane,
> > > + IGT_PLANE_FB_DAMAGE_CLIPS,
> > > + &data->cursor_clip,
> > > + sizeof(struct
> > > drm_mode_rect));
> > > + else
> > > + igt_plane_replace_prop_blob(test_plane,
> > > + IGT_PLANE_FB_DAMAGE_CLIPS,
> > > + &data->plane_update_clip,
> > > + sizeof(struct
> > > drm_mode_rect)*
> > > + data->damage_area_count);
> > > +
> > > + igt_plane_set_position(data->test_plane, 0, 0);
> > > + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> > > +
> > > + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> > > +
> > > + expected_output(data);
> > > +}
> > > +
> > > +static void run(data_t *data)
> > > +{
> > > + igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2));
> > > +
> > > + switch (data->op) {
> > > + case PLANE_UPDATE:
> > > + case OVERLAY_PRIM_UPDATE:
> > > + damaged_plane_update(data);
> > > + break;
> > > + case PLANE_MOVE:
> > > + damaged_plane_move(data);
> > > + break;
> > > + default:
> > > + igt_assert(false);
> > > + }
> > > +}
> > > +
> > > +static void cleanup(data_t *data)
> > > +{
> > > + igt_plane_t *primary;
> > > + igt_plane_t *sprite;
> > > +
> > > + primary = igt_output_get_plane_type(data->output,
> > > + DRM_PLANE_TYPE_PRIMARY);
> > > +
> > > + igt_plane_set_fb(primary, NULL);
> > > +
> > > + if (data->test_plane_id != DRM_PLANE_TYPE_PRIMARY) {
> > > + igt_plane_set_position(data->test_plane, 0, 0);
> > > + igt_plane_set_fb(data->test_plane, NULL);
> > > + }
> > > +
> > > + if (data->op == OVERLAY_PRIM_UPDATE) {
> > > + sprite = igt_output_get_plane_type(data->output,
> > > + DRM_PLANE_TYPE_OVERLAY);
> > > + igt_plane_set_position(sprite, 0, 0);
> > > + igt_plane_set_fb(sprite, NULL);
> > > + }
> > > +
> > > + igt_display_commit2(&data->display, COMMIT_ATOMIC);
> > > +
> > > + igt_remove_fb(data->drm_fd, &data->fb_primary);
> > > + igt_remove_fb(data->drm_fd, &data->fb_overlay);
> > > + igt_remove_fb(data->drm_fd, &data->fb_cursor);
> > > + igt_remove_fb(data->drm_fd, &data->fb_test); }
> > > +
> > > +igt_main
> > > +{
> > > + data_t data = {};
> > > + int i;
> > > +
> > > + igt_fixture {
> > > + int r;
> > > +
> > > + data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
> > > + data.debugfs_fd = igt_debugfs_dir(data.drm_fd);
> > > + kmstest_set_vt_graphics_mode();
> > > +
> > > + igt_require_f(psr_sink_support(data.drm_fd,
> > > + data.debugfs_fd,
> > > PSR_MODE_2),
> > > + "Sink does not support PSR2\n");
> > > +
> > > + igt_require_f(psr2_selective_fetch_check(data.debugfs_f
> > > d),
> > > + "PSR2 selective fetch not enabled\n");
> > > +
> > > + data.bufmgr = drm_intel_bufmgr_gem_init(data.drm_fd,
> > > 4096);
> > > + igt_assert(data.bufmgr);
> > > + drm_intel_bufmgr_gem_enable_reuse(data.bufmgr);
> > > +
> > > + display_init(&data);
> > > +
> > > + /* Test if PSR2 can be enabled */
> > > + igt_require_f(psr_enable(data.drm_fd,
> > > + data.debugfs_fd, PSR_MODE_2),
> > > + "Error enabling PSR2\n");
> > > +
> > > + data.damage_area_count = MAX_DAMAGE_AREAS;
> > > + data.op = PLANE_UPDATE;
> > > + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> > > + prepare(&data);
> > > + r = psr_wait_entry(data.debugfs_fd, PSR_MODE_2);
> > > + cleanup(&data);
> > > + if (!r)
> > > + psr_print_debugfs(data.debugfs_fd);
> > > + igt_require_f(r, "PSR2 can not be enabled\n");
> > > + }
> > > +
> > > + /* Verify primary plane selective fetch */
> > > + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> > > + igt_subtest_f("primary-%s-sf-dmg-area-%d",
> > > op_str(data.op), i) {
> > > + data.damage_area_count = i;
> > > + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> > > + prepare(&data);
> > > + run(&data);
> > > + cleanup(&data);
> > > + }
> > > + }
> > > +
> > > + /* Verify overlay plane selective fetch */
> > > + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> > > + igt_subtest_f("overlay-%s-sf-dmg-area-%d",
> > > op_str(data.op), i) {
> > > + data.damage_area_count = i;
> > > + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> > > + prepare(&data);
> > > + run(&data);
> > > + cleanup(&data);
> > > + }
> > > + }
> > > +
> > > + /* Verify overlay plane selective fetch */
> > > + igt_subtest_f("cursor-%s-sf", op_str(data.op)) {
> > > + data.damage_area_count = 1;
> > > + data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> > > + prepare(&data);
> > > + run(&data);
> > > + cleanup(&data);
> > > + }
> > > +
> > > + /* Only for overlay plane */
> > > + data.op = PLANE_MOVE;
> > > + /* Verify overlay plane move selective fetch */
> > > + for (i = POS_TOP_LEFT; i <= POS_BOTTOM_RIGHT ; i++) {
> > > + igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i)
> > > {
> > > + data.pos = i;
> > > + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> > > + prepare(&data);
> > > + run(&data);
> > > + cleanup(&data);
> > > + }
> > > + }
> > > +
> > > + /* Verify primary plane selective fetch with overplay plane
> > > blended */
> > > + data.op = OVERLAY_PRIM_UPDATE;
> > > + for (i = 1; i <= MAX_DAMAGE_AREAS; i++) {
> > > + igt_subtest_f("%s-sf-dmg-area-%d", op_str(data.op), i)
> > > {
> > > + data.damage_area_count = i;
> > > + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> > > + prepare(&data);
> > > + run(&data);
> > > + cleanup(&data);
> > > + }
> > > + }
> > > +
> > > + igt_fixture {
> > > + close(data.debugfs_fd);
> > > + drm_intel_bufmgr_destroy(data.bufmgr);
> > > + display_fini(&data);
> > > + }
> > > +}
> > > diff --git a/tests/meson.build b/tests/meson.build index
> > > a2decf4ab..4cab294b8 100644
> > > --- a/tests/meson.build
> > > +++ b/tests/meson.build
> > > @@ -64,6 +64,7 @@ test_progs = [
> > > 'kms_properties',
> > > 'kms_psr',
> > > 'kms_psr2_su',
> > > + 'kms_psr2_sf',
> > > 'kms_pwrite_crc',
> > > 'kms_rmfb',
> > > 'kms_rotation_crc',
> >
> > And this igt test case is needed for testing this feature (
> > https://patchwork.freedesktop.org/series/84910/ ) when it comes to
> > getting the
> > latest revision of the kernel patch, I'll leave more comments which
> > include the
> > test result.
>
> Ok.
>
> Thanks,
> Pankaj
>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> > Br,
> > G.G.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
` (5 preceding siblings ...)
2020-12-09 0:14 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2021-01-08 12:21 ` Petri Latvala
6 siblings, 0 replies; 12+ messages in thread
From: Petri Latvala @ 2021-01-08 12:21 UTC (permalink / raw)
To: Pankaj Bharadiya; +Cc: igt-dev
On Tue, Dec 08, 2020 at 10:31:06PM +0530, Pankaj Bharadiya wrote:
> Add new test for selective fetch
>
> Pankaj Bharadiya (3):
> lib/kms: Add fb damage clip plane property
> lib/igt_psr: Add function to check PSR2 selective fetch
> tests: Add new PSR2 selective fetch test
>
> lib/igt_kms.c | 3 +
> lib/igt_kms.h | 1 +
> lib/igt_psr.c | 10 +
> lib/igt_psr.h | 1 +
> tests/Makefile.sources | 1 +
> tests/kms_psr2_sf.c | 649 +++++++++++++++++++++++++++++++++++++++++
> tests/meson.build | 1 +
> 7 files changed, 666 insertions(+)
> create mode 100644 tests/kms_psr2_sf.c
Merged the series btw.
--
Petri Latvala
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
* [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch
@ 2020-11-18 8:14 Pankaj Bharadiya
0 siblings, 0 replies; 12+ messages in thread
From: Pankaj Bharadiya @ 2020-11-18 8:14 UTC (permalink / raw)
To: gwan-gyeong.mun, igt-dev, jose.souza
Add new test for selective fetch
Pankaj Bharadiya (3):
lib/kms: Add fb damage clip plane property
lib/igt_psr: Add function to check PSR2 selective fetch
tests: Add new PSR2 selective fetch test
lib/igt_kms.c | 3 +
lib/igt_kms.h | 1 +
lib/igt_psr.c | 10 +
lib/igt_psr.h | 1 +
tests/Makefile.sources | 1 +
tests/kms_psr2_sf.c | 717 +++++++++++++++++++++++++++++++++++++++++
tests/meson.build | 1 +
7 files changed, 734 insertions(+)
create mode 100644 tests/kms_psr2_sf.c
--
2.29.2
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-01-08 12:21 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-08 17:01 [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 1/3] lib/kms: Add fb damage clip plane property Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_psr: Add function to check PSR2 selective fetch Pankaj Bharadiya
2020-12-08 17:01 ` [igt-dev] [PATCH i-g-t 3/3] tests: Add new PSR2 selective fetch test Pankaj Bharadiya
2020-12-16 10:50 ` Mun, Gwan-gyeong
2020-12-21 4:44 ` Laxminarayan Bharadiya, Pankaj
2021-01-04 19:37 ` Mun, Gwan-gyeong
2020-12-08 17:22 ` [igt-dev] [PATCH i-g-t 0/3] Add FB_DAMAGE_CLIPS prop and new test for Selective fetch Souza, Jose
2020-12-08 19:31 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
2020-12-09 0:14 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2021-01-08 12:21 ` [igt-dev] [PATCH i-g-t 0/3] " Petri Latvala
-- strict thread matches above, loose matches on Subject: below --
2020-11-18 8:14 Pankaj Bharadiya
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.