From: "Ser, Simon" <simon.ser@intel.com> To: "Liviu.Dudau@arm.com" <Liviu.Dudau@arm.com>, "Hiler, Arkadiusz" <arkadiusz.hiler@intel.com>, "Brian.Starkey@arm.com" <Brian.Starkey@arm.com>, "Latvala, Petri" <petri.latvala@intel.com>, "rodrigosiqueiramelo@gmail.com" <rodrigosiqueiramelo@gmail.com>, "daniel@ffwll.ch" <daniel@ffwll.ch> Cc: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>, "intel-gfx@lists.freedesktop.org" <intel-gfx@lists.freedesktop.org>, "nd@arm.com" <nd@arm.com> Subject: Re: [igt-dev] [PATCH V6 i-g-t 4/6] kms_writeback: Add writeback-check-output Date: Fri, 12 Jul 2019 12:34:26 +0000 [thread overview] Message-ID: <eaafd2a8f9b780b66d893c20228101dcd434cf6f.camel@intel.com> (raw) In-Reply-To: <dd44be927bff3b0b38aa4e7c31b639a5d28a5213.1560374714.git.rodrigosiqueiramelo@gmail.com> Mostly looks good, here are a few comments. On Wed, 2019-06-12 at 23:17 -0300, Brian Starkey wrote: > Add a test which makes commits using the writeback connector, and > checks the output buffer hash to make sure it is/isn't written as > appropriate. > > Signed-off-by: Brian Starkey <brian.starkey@arm.com> > --- > tests/kms_writeback.c | 124 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 124 insertions(+) > > diff --git a/tests/kms_writeback.c b/tests/kms_writeback.c > index 66ef48a6..0f20dadd 100644 > --- a/tests/kms_writeback.c > +++ b/tests/kms_writeback.c > @@ -30,6 +30,7 @@ > #include "igt.h" > #include "igt_core.h" > #include "igt_fb.h" > +#include "sw_sync.h" > > static drmModePropertyBlobRes *get_writeback_formats_blob(igt_output_t *output) > { > @@ -221,6 +222,116 @@ static void writeback_fb_id(igt_output_t *output, igt_fb_t *valid_fb, igt_fb_t * > igt_assert(ret == 0); > } > > +static void fill_fb(igt_fb_t *fb, double color[3]) > +{ > + cairo_t *cr = igt_get_cairo_ctx(fb->fd, fb); > + igt_assert(cr); > + > + igt_paint_color(cr, 0, 0, fb->width, fb->height, > + color[0], color[1], color[2]); > +} > + > +static void get_and_wait_out_fence(igt_output_t *output) > +{ > + int ret; > + > + igt_assert(output->writeback_out_fence_fd >= 0); > + > + ret = sync_fence_wait(output->writeback_out_fence_fd, 1000); > + igt_assert(ret == 0); When filtering failures in CI Bug Log, "ret == 0" is not very helpful and may not be unique. Can we add a descriptive error message, with something among the lines of: igt_assert_f(ret == 0, "sync_fence_wait failed: %s\n", strerror(-ret)); > + close(output->writeback_out_fence_fd); > + output->writeback_out_fence_fd = -1; > +} > + > +static void writeback_sequence(igt_output_t *output, igt_plane_t *plane, > + igt_fb_t *in_fb, igt_fb_t *out_fbs[], int n_commits) > +{ > + int i, color_idx = 0; > + double in_fb_colors[2][3] = { > + { 1.0, 0.0, 0.0 }, > + { 0.0, 1.0, 0.0 }, > + }; > + double clear_color[3] = { 1.0, 1.0, 1.0 }; > + igt_crc_t cleared_crc, out_expected; > + > + for (i = 0; i < n_commits; i++, color_idx++) { > + /* Change the input color each time */ > + fill_fb(in_fb, in_fb_colors[color_idx % 2]); Why do we need two indexes (i and color_idx)? I think [i % 2] should work just fine. > + if (out_fbs[i]) { > + igt_crc_t out_before; > + > + /* Get the expected CRC */ > + fill_fb(out_fbs[i], in_fb_colors[color_idx % 2]); > + igt_fb_get_crc(out_fbs[i], &out_expected); Using out_fbs[i] to compute the expected CRC is a little bit confusing. I think we can just use in_fb here (which is already filled with the proper color). > + fill_fb(out_fbs[i], clear_color); > + if (i == 0) > + igt_fb_get_crc(out_fbs[i], &cleared_crc); > + igt_fb_get_crc(out_fbs[i], &out_before); > + igt_assert_crc_equal(&cleared_crc, &out_before); > + } > + > + /* Commit */ > + igt_plane_set_fb(plane, in_fb); > + igt_output_set_writeback_fb(output, out_fbs[i]); > + > + igt_display_commit_atomic(output->display, > + DRM_MODE_ATOMIC_ALLOW_MODESET, > + NULL); > + if (out_fbs[i]) > + get_and_wait_out_fence(output); > + > + /* Make sure the old output buffer is untouched */ > + if (i > 0 && out_fbs[i - 1] && (out_fbs[i] != out_fbs[i - 1])) { Nit: unnecessary parentheses here > + igt_crc_t out_prev; > + igt_fb_get_crc(out_fbs[i - 1], &out_prev); > + igt_assert_crc_equal(&cleared_crc, &out_prev); > + } > + > + /* Make sure this output buffer is written */ > + if (out_fbs[i]) { > + igt_crc_t out_after; > + igt_fb_get_crc(out_fbs[i], &out_after); > + igt_assert_crc_equal(&out_expected, &out_after); > + > + /* And clear it, for the next time */ > + fill_fb(out_fbs[i], clear_color); > + } > + } > +} > + > +static void writeback_check_output(igt_output_t *output, igt_plane_t *plane, > + igt_fb_t *input_fb, igt_fb_t *output_fb) > +{ > + igt_fb_t *out_fbs[2] = { 0 }; > + igt_fb_t second_out_fb; > + int ret; > + > + /* One commit, with a writeback. */ > + writeback_sequence(output, plane, input_fb, &output_fb, 1); > + > + /* Two commits, the second with no writeback */ > + out_fbs[0] = output_fb; > + writeback_sequence(output, plane, input_fb, out_fbs, 2); > + > + /* Two commits, both with writeback */ > + out_fbs[1] = output_fb; > + writeback_sequence(output, plane, input_fb, out_fbs, 2); > + > + ret = igt_create_fb(output_fb->fd, output_fb->width, output_fb->height, > + DRM_FORMAT_XRGB8888, > + igt_fb_mod_to_tiling(0), > + &second_out_fb); > + igt_require(ret > 0); unsigned int cast to int here > + /* Two commits, with different writeback buffers */ > + out_fbs[1] = &second_out_fb; > + writeback_sequence(output, plane, input_fb, out_fbs, 2); > + > + igt_remove_fb(output_fb->fd, &second_out_fb); > +} > + > igt_main > { > igt_display_t display; > @@ -307,6 +418,19 @@ igt_main > igt_remove_fb(display.drm_fd, &output_fb); > } > > + igt_subtest("writeback-check-output") { > + igt_fb_t output_fb; > + ret = igt_create_fb(display.drm_fd, mode.hdisplay, mode.vdisplay, > + DRM_FORMAT_XRGB8888, > + igt_fb_mod_to_tiling(0), > + &output_fb); > + igt_require(ret > 0); unsigned int cast to int here > + writeback_check_output(output, plane, &input_fb, &output_fb); > + > + igt_remove_fb(display.drm_fd, &output_fb); > + } > + > igt_fixture { > igt_remove_fb(display.drm_fd, &input_fb); > igt_display_fini(&display); > _______________________________________________ > igt-dev mailing list > igt-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/igt-dev _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
WARNING: multiple messages have this Message-ID (diff)
From: "Ser, Simon" <simon.ser@intel.com> To: "Liviu.Dudau@arm.com" <Liviu.Dudau@arm.com>, "Hiler, Arkadiusz" <arkadiusz.hiler@intel.com>, "Brian.Starkey@arm.com" <Brian.Starkey@arm.com>, "Latvala, Petri" <petri.latvala@intel.com>, "rodrigosiqueiramelo@gmail.com" <rodrigosiqueiramelo@gmail.com>, "daniel@ffwll.ch" <daniel@ffwll.ch> Cc: "igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>, "intel-gfx@lists.freedesktop.org" <intel-gfx@lists.freedesktop.org>, "nd@arm.com" <nd@arm.com> Subject: Re: [igt-dev] [PATCH V6 i-g-t 4/6] kms_writeback: Add writeback-check-output Date: Fri, 12 Jul 2019 12:34:26 +0000 [thread overview] Message-ID: <eaafd2a8f9b780b66d893c20228101dcd434cf6f.camel@intel.com> (raw) In-Reply-To: <dd44be927bff3b0b38aa4e7c31b639a5d28a5213.1560374714.git.rodrigosiqueiramelo@gmail.com> Mostly looks good, here are a few comments. On Wed, 2019-06-12 at 23:17 -0300, Brian Starkey wrote: > Add a test which makes commits using the writeback connector, and > checks the output buffer hash to make sure it is/isn't written as > appropriate. > > Signed-off-by: Brian Starkey <brian.starkey@arm.com> > --- > tests/kms_writeback.c | 124 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 124 insertions(+) > > diff --git a/tests/kms_writeback.c b/tests/kms_writeback.c > index 66ef48a6..0f20dadd 100644 > --- a/tests/kms_writeback.c > +++ b/tests/kms_writeback.c > @@ -30,6 +30,7 @@ > #include "igt.h" > #include "igt_core.h" > #include "igt_fb.h" > +#include "sw_sync.h" > > static drmModePropertyBlobRes *get_writeback_formats_blob(igt_output_t *output) > { > @@ -221,6 +222,116 @@ static void writeback_fb_id(igt_output_t *output, igt_fb_t *valid_fb, igt_fb_t * > igt_assert(ret == 0); > } > > +static void fill_fb(igt_fb_t *fb, double color[3]) > +{ > + cairo_t *cr = igt_get_cairo_ctx(fb->fd, fb); > + igt_assert(cr); > + > + igt_paint_color(cr, 0, 0, fb->width, fb->height, > + color[0], color[1], color[2]); > +} > + > +static void get_and_wait_out_fence(igt_output_t *output) > +{ > + int ret; > + > + igt_assert(output->writeback_out_fence_fd >= 0); > + > + ret = sync_fence_wait(output->writeback_out_fence_fd, 1000); > + igt_assert(ret == 0); When filtering failures in CI Bug Log, "ret == 0" is not very helpful and may not be unique. Can we add a descriptive error message, with something among the lines of: igt_assert_f(ret == 0, "sync_fence_wait failed: %s\n", strerror(-ret)); > + close(output->writeback_out_fence_fd); > + output->writeback_out_fence_fd = -1; > +} > + > +static void writeback_sequence(igt_output_t *output, igt_plane_t *plane, > + igt_fb_t *in_fb, igt_fb_t *out_fbs[], int n_commits) > +{ > + int i, color_idx = 0; > + double in_fb_colors[2][3] = { > + { 1.0, 0.0, 0.0 }, > + { 0.0, 1.0, 0.0 }, > + }; > + double clear_color[3] = { 1.0, 1.0, 1.0 }; > + igt_crc_t cleared_crc, out_expected; > + > + for (i = 0; i < n_commits; i++, color_idx++) { > + /* Change the input color each time */ > + fill_fb(in_fb, in_fb_colors[color_idx % 2]); Why do we need two indexes (i and color_idx)? I think [i % 2] should work just fine. > + if (out_fbs[i]) { > + igt_crc_t out_before; > + > + /* Get the expected CRC */ > + fill_fb(out_fbs[i], in_fb_colors[color_idx % 2]); > + igt_fb_get_crc(out_fbs[i], &out_expected); Using out_fbs[i] to compute the expected CRC is a little bit confusing. I think we can just use in_fb here (which is already filled with the proper color). > + fill_fb(out_fbs[i], clear_color); > + if (i == 0) > + igt_fb_get_crc(out_fbs[i], &cleared_crc); > + igt_fb_get_crc(out_fbs[i], &out_before); > + igt_assert_crc_equal(&cleared_crc, &out_before); > + } > + > + /* Commit */ > + igt_plane_set_fb(plane, in_fb); > + igt_output_set_writeback_fb(output, out_fbs[i]); > + > + igt_display_commit_atomic(output->display, > + DRM_MODE_ATOMIC_ALLOW_MODESET, > + NULL); > + if (out_fbs[i]) > + get_and_wait_out_fence(output); > + > + /* Make sure the old output buffer is untouched */ > + if (i > 0 && out_fbs[i - 1] && (out_fbs[i] != out_fbs[i - 1])) { Nit: unnecessary parentheses here > + igt_crc_t out_prev; > + igt_fb_get_crc(out_fbs[i - 1], &out_prev); > + igt_assert_crc_equal(&cleared_crc, &out_prev); > + } > + > + /* Make sure this output buffer is written */ > + if (out_fbs[i]) { > + igt_crc_t out_after; > + igt_fb_get_crc(out_fbs[i], &out_after); > + igt_assert_crc_equal(&out_expected, &out_after); > + > + /* And clear it, for the next time */ > + fill_fb(out_fbs[i], clear_color); > + } > + } > +} > + > +static void writeback_check_output(igt_output_t *output, igt_plane_t *plane, > + igt_fb_t *input_fb, igt_fb_t *output_fb) > +{ > + igt_fb_t *out_fbs[2] = { 0 }; > + igt_fb_t second_out_fb; > + int ret; > + > + /* One commit, with a writeback. */ > + writeback_sequence(output, plane, input_fb, &output_fb, 1); > + > + /* Two commits, the second with no writeback */ > + out_fbs[0] = output_fb; > + writeback_sequence(output, plane, input_fb, out_fbs, 2); > + > + /* Two commits, both with writeback */ > + out_fbs[1] = output_fb; > + writeback_sequence(output, plane, input_fb, out_fbs, 2); > + > + ret = igt_create_fb(output_fb->fd, output_fb->width, output_fb->height, > + DRM_FORMAT_XRGB8888, > + igt_fb_mod_to_tiling(0), > + &second_out_fb); > + igt_require(ret > 0); unsigned int cast to int here > + /* Two commits, with different writeback buffers */ > + out_fbs[1] = &second_out_fb; > + writeback_sequence(output, plane, input_fb, out_fbs, 2); > + > + igt_remove_fb(output_fb->fd, &second_out_fb); > +} > + > igt_main > { > igt_display_t display; > @@ -307,6 +418,19 @@ igt_main > igt_remove_fb(display.drm_fd, &output_fb); > } > > + igt_subtest("writeback-check-output") { > + igt_fb_t output_fb; > + ret = igt_create_fb(display.drm_fd, mode.hdisplay, mode.vdisplay, > + DRM_FORMAT_XRGB8888, > + igt_fb_mod_to_tiling(0), > + &output_fb); > + igt_require(ret > 0); unsigned int cast to int here > + writeback_check_output(output, plane, &input_fb, &output_fb); > + > + igt_remove_fb(display.drm_fd, &output_fb); > + } > + > igt_fixture { > igt_remove_fb(display.drm_fd, &input_fb); > igt_display_fini(&display); > _______________________________________________ > igt-dev mailing list > igt-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/igt-dev _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev
next prev parent reply other threads:[~2019-07-12 12:34 UTC|newest] Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-13 2:14 [PATCH V6 i-g-t 0/6] igt: Add support for testing writeback connectors Rodrigo Siqueira 2019-06-13 2:14 ` [igt-dev] " Rodrigo Siqueira 2019-06-13 2:16 ` [PATCH V6 i-g-t 1/6] lib/igt_kms: Add writeback support Brian Starkey 2019-06-13 2:16 ` [Intel-gfx] " Brian Starkey 2019-06-13 14:54 ` Liviu Dudau 2019-06-13 14:54 ` [igt-dev] " Liviu Dudau 2019-06-18 21:56 ` Rodrigo Siqueira 2019-06-18 21:56 ` [igt-dev] " Rodrigo Siqueira 2019-07-03 12:15 ` Ser, Simon 2019-07-03 12:15 ` Ser, Simon 2019-07-09 14:32 ` Rodrigo Siqueira 2019-07-09 14:32 ` Rodrigo Siqueira 2019-07-09 14:42 ` Ser, Simon 2019-07-09 14:42 ` Ser, Simon 2019-07-09 15:07 ` Rodrigo Siqueira 2019-07-09 15:07 ` Rodrigo Siqueira 2019-07-10 8:48 ` Ser, Simon 2019-07-10 8:48 ` Ser, Simon 2019-06-13 2:16 ` [PATCH V6 i-g-t 2/6] kms_writeback: Add initial writeback tests Brian Starkey 2019-06-13 2:16 ` [igt-dev] " Brian Starkey 2019-07-10 11:57 ` Ser, Simon 2019-07-10 11:57 ` Ser, Simon 2019-07-12 2:44 ` Rodrigo Siqueira 2019-07-12 2:44 ` Rodrigo Siqueira 2019-07-12 11:40 ` Ser, Simon 2019-07-12 11:40 ` Ser, Simon 2019-07-17 1:21 ` Rodrigo Siqueira 2019-07-17 1:21 ` Rodrigo Siqueira 2019-07-17 13:00 ` Ser, Simon 2019-07-17 13:00 ` Ser, Simon 2019-07-16 15:22 ` Liviu.Dudau 2019-07-16 15:22 ` Liviu.Dudau 2019-07-17 11:46 ` Ser, Simon 2019-07-17 11:46 ` [Intel-gfx] " Ser, Simon 2019-07-18 9:49 ` Liviu.Dudau 2019-07-18 9:49 ` Liviu.Dudau 2019-07-18 9:56 ` Ser, Simon 2019-07-18 9:56 ` Ser, Simon 2019-07-18 11:15 ` Liviu.Dudau 2019-07-18 11:15 ` Liviu.Dudau 2019-07-18 11:46 ` Ser, Simon 2019-07-18 11:46 ` Ser, Simon 2019-07-19 1:21 ` Rodrigo Siqueira 2019-07-19 1:21 ` Rodrigo Siqueira 2019-06-13 2:17 ` [PATCH V6 i-g-t 3/6] lib: Add function to hash a framebuffer Brian Starkey 2019-06-13 2:17 ` [Intel-gfx] " Brian Starkey 2019-07-10 15:30 ` [igt-dev] " Ser, Simon 2019-07-10 15:30 ` Ser, Simon 2019-07-10 15:34 ` Ser, Simon 2019-07-10 15:34 ` Ser, Simon 2019-07-12 2:49 ` Rodrigo Siqueira 2019-07-12 2:49 ` Rodrigo Siqueira 2019-07-12 12:17 ` Ser, Simon 2019-07-12 12:17 ` Ser, Simon 2019-07-17 1:25 ` Rodrigo Siqueira 2019-07-17 1:25 ` Rodrigo Siqueira 2019-06-13 2:17 ` [PATCH V6 i-g-t 4/6] kms_writeback: Add writeback-check-output Brian Starkey 2019-06-13 2:17 ` [igt-dev] " Brian Starkey 2019-07-12 12:34 ` Ser, Simon [this message] 2019-07-12 12:34 ` Ser, Simon 2019-06-13 2:18 ` [PATCH V6 i-g-t 5/6] lib/igt_kms: Add igt_output_clone_pipe for cloning Brian Starkey 2019-06-13 2:18 ` [igt-dev] " Brian Starkey 2019-07-12 12:54 ` Ser, Simon 2019-07-12 12:54 ` Ser, Simon 2019-07-17 1:47 ` Rodrigo Siqueira 2019-07-17 1:47 ` Rodrigo Siqueira 2019-07-17 13:10 ` Ser, Simon 2019-07-17 13:10 ` Ser, Simon 2019-06-13 2:19 ` [PATCH V6 i-g-t 6/6] kms_writeback: Add tests using a cloned output Brian Starkey 2019-06-13 2:19 ` [igt-dev] " Brian Starkey 2019-06-13 3:38 ` [igt-dev] ✗ Fi.CI.BAT: failure for igt: Add support for testing writeback connectors (rev6) Patchwork
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=eaafd2a8f9b780b66d893c20228101dcd434cf6f.camel@intel.com \ --to=simon.ser@intel.com \ --cc=Brian.Starkey@arm.com \ --cc=Liviu.Dudau@arm.com \ --cc=arkadiusz.hiler@intel.com \ --cc=daniel@ffwll.ch \ --cc=igt-dev@lists.freedesktop.org \ --cc=intel-gfx@lists.freedesktop.org \ --cc=nd@arm.com \ --cc=petri.latvala@intel.com \ --cc=rodrigosiqueiramelo@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.