* [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 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 ` (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 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.