From: "Maiti, Nabendu Bikash" <nabendu.bikash.maiti@intel.com>
To: Thomas Wood <thomas.wood@intel.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH] igt/kms_plane_scaling : plane scaling enhancement and plane support for bxt
Date: Mon, 20 Jul 2015 11:06:17 +0530 [thread overview]
Message-ID: <55AC88D1.5080600@intel.com> (raw)
In-Reply-To: <CANkqdn1LbbijhwrWAi9tne0DV6kAmY_7K88rTVoMi+EUyJAxHg@mail.gmail.com>
On 7/17/2015 5:06 PM, Thomas Wood wrote:
> On 17 July 2015 at 09:34, Nabendu Maiti<nabendu.bikash.maiti@intel.com> wrote:
>> 1) Added more overlay plane support for BXT.
>> 2) Added and enhanced scaler test cases for additional planes.
> Please split the various separate changes in different patches.
>
> The i-g-t tag should also appear in the subject prefix rather than the
> subject tag. (i.e. use --subject-prefix="PATCH i-g-t" or git config
> format.subjectprefix "PATCH i-g-t").
Agreed.
>> Signed-off-by: Nabendu Maiti<nabendu.bikash.maiti@intel.com>
>> ---
>> lib/igt_fb.c | 40 ++++++++++++++++++++++++
>> lib/igt_fb.h | 1 +
>> lib/igt_kms.c | 1 +
>> lib/igt_kms.h | 3 +-
>> tests/kms_plane_scaling.c | 79 ++++++++++++++++++++++++++++++++++++++++++++---
>> 5 files changed, 118 insertions(+), 6 deletions(-)
>>
>> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
>> index 134dbd2..e61b762 100644
>> --- a/lib/igt_fb.c
>> +++ b/lib/igt_fb.c
>> @@ -393,6 +393,46 @@ void igt_paint_image(cairo_t *cr, const char *filename,
>> }
>>
>> /**
>> + * igt_paint_cross_ruler:
>> + * @cr: cairo drawing context
>> + * @dst_width: width of the horizontal ruler
>> + * @dst_height: height of the vertical ruler
>> + *
>> + * This function can be used to draw a cross ruler on a frame buffer.
>> + */
>> +void
>> +igt_paint_cross_ruler(cairo_t *cr, uint16_t w, uint16_t h)
> Other cairo functions use int rather than uint16_t for width and
> height, so int should be sufficient here too, at least for
> consistency.
>
Okey. I'll do it.
>> +{
>> +
>> + uint16_t i;
>> +
>> + /* Paint corner markers */
>> + paint_marker(cr, 0, 0);
>> + paint_marker(cr, w, 0);
>> + paint_marker(cr, 0, h);
>> + paint_marker(cr, w, h);
>> +
>> +
>> + cairo_move_to(cr, w/2, 0);
>> + cairo_line_to(cr, w/2, h);
>> +
>> + cairo_set_source_rgb(cr, 4, 1, 10);
>> + cairo_move_to(cr, 0, h/2);
>> + cairo_line_to(cr, w, h/2 );
>> + cairo_stroke(cr);
>> +
>> + cairo_set_source_rgb(cr, 2, 5, 1);
>> + cairo_set_line_width(cr, 2);
>> + cairo_stroke(cr);
>> + cairo_stroke_preserve(cr);
>> + for (i = 0; i < w; i +=200)
>> + paint_marker(cr, i, h/2);
>> +
>> + for (i = 0; i < h; i +=200)
>> + paint_marker(cr, w/2, i);
>> +}
>> +
>> +/**
>> * igt_create_fb_with_bo_size:
>> * @fd: open i915 drm file descriptor
>> * @width: width of the framebuffer in pixel
>> diff --git a/lib/igt_fb.h b/lib/igt_fb.h
>> index a07acd2..cf6e7e3 100644
>> --- a/lib/igt_fb.h
>> +++ b/lib/igt_fb.h
>> @@ -98,6 +98,7 @@ void igt_write_fb_to_png(int fd, struct igt_fb *fb, const char *filename);
>> int igt_cairo_printf_line(cairo_t *cr, enum igt_text_align align,
>> double yspacing, const char *fmt, ...)
>> __attribute__((format (printf, 4, 5)));
>> +void igt_paint_cross_ruler(cairo_t *cr, uint16_t w, uint16_t h);
>>
>> /* helpers to handle drm fourcc codes */
>> uint32_t igt_bpp_depth_to_drm_format(int bpp, int depth);
>> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
>> index 0bb16b4..781ffa5 100644
>> --- a/lib/igt_kms.c
>> +++ b/lib/igt_kms.c
>> @@ -213,6 +213,7 @@ const char *kmstest_plane_name(enum igt_plane plane)
>> [IGT_PLANE_1] = "plane1",
>> [IGT_PLANE_2] = "plane2",
>> [IGT_PLANE_3] = "plane3",
>> + [IGT_PLANE_4] = "plane4",
>> [IGT_PLANE_CURSOR] = "cursor",
>> };
>>
>> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
>> index 09c08aa..14c8b28 100644
>> --- a/lib/igt_kms.h
>> +++ b/lib/igt_kms.h
>> @@ -53,6 +53,7 @@ enum igt_plane {
>> IGT_PLANE_PRIMARY = IGT_PLANE_1,
>> IGT_PLANE_2,
>> IGT_PLANE_3,
>> + IGT_PLANE_4,
>> IGT_PLANE_CURSOR,
>> };
>>
>> @@ -205,7 +206,7 @@ struct igt_pipe {
>> igt_display_t *display;
>> enum pipe pipe;
>> bool enabled;
>> -#define IGT_MAX_PLANES 4
>> +#define IGT_MAX_PLANES 5
>> int n_planes;
>> igt_plane_t planes[IGT_MAX_PLANES];
>> uint64_t background; /* Background color MSB BGR 16bpc LSB */
>> diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
>> index 00db5cb..8e3d559 100644
>> --- a/tests/kms_plane_scaling.c
>> +++ b/tests/kms_plane_scaling.c
>> @@ -23,7 +23,7 @@
>> */
>>
>> #include <math.h>
>> -
>> +#include <cairo.h>
> cairo is already included via igt_kms.h and igt_fb.h.
>
Will remove in the updated patches.
>> #include "drmtest.h"
>> #include "igt_debugfs.h"
>> #include "igt_kms.h"
>> @@ -48,9 +48,11 @@ typedef struct {
>> struct igt_fb fb1;
>> struct igt_fb fb2;
>> struct igt_fb fb3;
>> + struct igt_fb fb4;
>> int fb_id1;
>> int fb_id2;
>> int fb_id3;
>> + int fb_id4;
>>
>> igt_plane_t *plane1;
>> igt_plane_t *plane2;
>> @@ -61,6 +63,22 @@ typedef struct {
>> #define FILE_NAME "1080p-left.png"
>>
>> static void
>> +paint_plane_ID(data_t *d, struct igt_fb *fb, igt_plane_t *plane)
>> +{
>> + cairo_t *cr;
>> +
>> + cr = igt_get_cairo_ctx(d->drm_fd, fb);
>> + cairo_move_to(cr, (fb->width/5),
>> + (fb->height / 5));
>> + cairo_set_font_size(cr, 25);
>> + igt_cairo_printf_line(cr, align_hcenter, 10, "PIPE:PLANE:");
>> + cairo_set_font_size(cr, 30);
>> + igt_cairo_printf_line(cr, align_hcenter, 40, " %d:%d",
>> + plane->pipe->pipe, plane->index);
>> + cairo_destroy(cr);
>> +}
>> +
>> +static void
>> paint_color(data_t *d, struct igt_fb *fb, uint16_t w, uint16_t h)
>> {
>> cairo_t *cr;
>> @@ -71,12 +89,14 @@ paint_color(data_t *d, struct igt_fb *fb, uint16_t w, uint16_t h)
>> }
>>
>> static void
>> -paint_image(data_t *d, struct igt_fb *fb, uint16_t w, uint16_t h)
>> +paint_image(const char *filename, data_t *d, struct igt_fb *fb,
>> + uint16_t w, uint16_t h)
> What is the purpose of the new filename parameter? It always appears
> to be set to to the same value (FILE_NAME) as used previously in the
> vall to igt_paint_image.
modified to pass different size imagefiles for different scaled planes
for future planned patches.
>
>> {
>> cairo_t *cr;
>>
>> cr = igt_get_cairo_ctx(d->drm_fd, fb);
>> - igt_paint_image(cr, FILE_NAME, 0, 0, w, h);
>> + igt_paint_image(cr, filename, 0, 0, w, h);
>> + igt_paint_cross_ruler(cr, w, h);
>> cairo_destroy(cr);
>> }
>>
>> @@ -106,6 +126,7 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
>> igt_assert(data->fb_id1);
>>
>> paint_color(data, &data->fb1, mode->hdisplay, mode->vdisplay);
>> + paint_plane_ID(data, &data->fb1, plane);
>>
>> /*
>> * We always set the primary plane to actually enable the pipe as
>> @@ -154,7 +175,10 @@ static void cleanup_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane)
>> igt_remove_fb(data->drm_fd, &data->fb3);
>> data->fb_id3 = 0;
>> }
>> -
>> + if (data->fb_id4) {
>> + igt_remove_fb(data->drm_fd, &data->fb4);
>> + data->fb_id4 = 0;
>> + }
>> if (!plane->is_primary) {
>> igt_plane_t *primary;
>>
>> @@ -235,7 +259,7 @@ static void test_plane_scaling(data_t *d)
>> LOCAL_I915_FORMAT_MOD_X_TILED, /* tiled */
>> &d->fb2);
>> igt_assert(d->fb_id2);
>> - paint_image(d, &d->fb2, d->fb2.width, d->fb2.height);
>> + paint_image(FILE_NAME, d, &d->fb2, d->fb2.width, d->fb2.height);
>>
>> d->fb_id3 = igt_create_fb(d->drm_fd,
>> mode->hdisplay, mode->vdisplay,
>> @@ -245,6 +269,17 @@ static void test_plane_scaling(data_t *d)
>> igt_assert(d->fb_id3);
>> paint_color(d, &d->fb3, mode->hdisplay, mode->vdisplay);
>>
>> + if ((display->pipes[pipe].n_planes > 4) && (pipe != PIPE_C)) {
>> + d->fb_id4 = igt_create_fb(d->drm_fd,
>> + d->image_w, d->image_h,
>> + DRM_FORMAT_XRGB8888,
>> + LOCAL_I915_FORMAT_MOD_X_TILED, /*tiled*/
>> + &d->fb4);
>> + igt_assert(d->fb_id4);
>> + paint_image(FILE_NAME, d,&d->fb4, d->fb4.width,
>> + d->fb4.height);
>> + }
>> +
>> /* Set up display with plane 1 */
>> d->plane1 = igt_output_get_plane(output, IGT_PLANE_PRIMARY);
>> prepare_crtc(d, output, pipe, d->plane1, mode, COMMIT_UNIVERSAL);
>> @@ -268,6 +303,7 @@ static void test_plane_scaling(data_t *d)
>> /* Set up fb2->plane2 mapping. */
>> d->plane2 = igt_output_get_plane(output, IGT_PLANE_2);
>> igt_plane_set_fb(d->plane2, &d->fb2);
>> + paint_plane_ID(d, &d->fb2, d->plane2);
>>
>> /* 2nd plane windowed */
>> igt_fb_set_position(&d->fb2, d->plane2, 100, 100);
>> @@ -293,6 +329,7 @@ static void test_plane_scaling(data_t *d)
>> igt_display_commit2(display, COMMIT_UNIVERSAL);
>>
>> if (primary_plane_scaling) {
>> +
>> /* Primary plane up scaling */
>> igt_fb_set_position(&d->fb1, d->plane1, 100, 100);
>> igt_fb_set_size(&d->fb1, d->plane1, 500, 500);
>> @@ -304,6 +341,7 @@ static void test_plane_scaling(data_t *d)
>> /* Set up fb3->plane3 mapping. */
>> d->plane3 = igt_output_get_plane(output, IGT_PLANE_3);
>> igt_plane_set_fb(d->plane3, &d->fb3);
>> + paint_plane_ID(d, &d->fb3, d->plane3);
>>
>> /* 3rd plane windowed - no scaling */
>> igt_fb_set_position(&d->fb3, d->plane3, 100, 100);
>> @@ -324,6 +362,35 @@ static void test_plane_scaling(data_t *d)
>> igt_plane_set_size(d->plane3, mode->hdisplay-300, mode->vdisplay-300);
>> igt_display_commit2(display, COMMIT_UNIVERSAL);
>>
>> + if ((display->pipes[pipe].n_planes > 4) && (pipe != PIPE_C)) {
>> +
>> + /* Set up fb4->plane4 mapping. */
>> + d->plane4 = igt_output_get_plane(output, IGT_PLANE_4);
>> + igt_plane_set_fb(d->plane4, &d->fb4);
>> + paint_plane_ID(d, &d->fb4, d->plane4);
>> +
>> + /* 4th plane windowed - no scaling */
>> + igt_fb_set_position(&d->fb4, d->plane4, 50, 200);
>> + igt_fb_set_size(&d->fb4, d->plane4, d->fb4.width-300, d->fb4.height-300);
>> + igt_plane_set_position(d->plane4, 100, 100);
>> + igt_plane_set_size(d->plane4, d->fb4.width-300, d->fb4.height-300);
>> + igt_display_commit2(display, COMMIT_UNIVERSAL);
>> +
>> + /* Switch scaler from plane 3 to plane 4 */
>> + igt_fb_set_position(&d->fb3, d->plane3, 100, 100);
>> + igt_fb_set_size(&d->fb3, d->plane3, d->fb3.width-300, d->fb3.height-300);
>> + igt_plane_set_position(d->plane3, 100, 100);
>> + igt_plane_set_size(d->plane3, d->fb3.width-300, d->fb3.height-300);
>> + igt_display_commit2(display, COMMIT_UNIVERSAL);
>> +
>> + igt_fb_set_position(&d->fb4, d->plane4, 10, 10);
>> + igt_fb_set_size(&d->fb4, d->plane4, d->fb4.width-50, d->fb4.height-50);
>> + igt_plane_set_position(d->plane4, 10, 10);
>> + igt_plane_set_size(d->plane4, mode->hdisplay-300, mode->vdisplay-300);
>> + igt_display_commit2(display, COMMIT_UNIVERSAL);
>> +
>> + }
>> +
>> if (primary_plane_scaling) {
>> /* Switch scaler from plane 1 to plane 2 */
>> igt_fb_set_position(&d->fb1, d->plane1, 0, 0);
>> @@ -341,6 +408,8 @@ static void test_plane_scaling(data_t *d)
>> /* back to single plane mode */
>> igt_plane_set_fb(d->plane2, NULL);
>> igt_plane_set_fb(d->plane3, NULL);
>> + if (d->plane4)
>> + igt_plane_set_fb(d->plane4, NULL);
>> igt_display_commit2(display, COMMIT_UNIVERSAL);
>>
>> valid_tests++;
>> --
>> 1.9.1
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-07-20 5:36 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-17 8:34 [PATCH] igt/kms_plane_scaling : plane scaling enhancement and plane support for bxt Nabendu Maiti
2015-07-17 11:36 ` Thomas Wood
2015-07-20 5:36 ` Maiti, Nabendu Bikash [this message]
2015-07-20 9:44 ` [PATCH i-g-t v2 0/2] Overlay Plane support for broxton and plane scaling ehancement Nabendu Maiti
2015-07-20 9:44 ` [PATCH i-g-t v2 1/2] lib/igt_fb : Add more overlay plane support for bxt Nabendu Maiti
2015-07-22 4:34 ` Gharpure, Mayuresh S
2015-07-22 8:19 ` Patrik Jakobsson
2015-07-20 9:44 ` [PATCH i-g-t v2 2/2] igt/kms_plane_scaling : plane scaling enhancement " Nabendu Maiti
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=55AC88D1.5080600@intel.com \
--to=nabendu.bikash.maiti@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=thomas.wood@intel.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: link
Be 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.