[Intel-gfx] [PATCH i-g-t 16/43] kms_rotation_crc: Factor out the square drawing function
Damien Lespiau
damien.lespiau at intel.com
Thu Jul 10 20:00:17 CEST 2014
Making function to the similar things is very common in programming.
Let's do it once again.
Cairo being a drawing library, it can be used to do the rotation!
Signed-off-by: Damien Lespiau <damien.lespiau at intel.com>
---
tests/kms_rotation_crc.c | 65 ++++++++++++++++++++++++++----------------------
1 file changed, 35 insertions(+), 30 deletions(-)
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index eb63326..5f499d7 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -31,6 +31,7 @@
#include <stdint.h>
#include <stddef.h>
#include <fcntl.h>
+#include <math.h>
#include "drmtest.h"
#include "igt_debugfs.h"
@@ -65,15 +66,39 @@ typedef struct {
int rotate;
} data_t;
+static void
+paint_squares(data_t *data, struct igt_fb *fb, drmModeModeInfo *mode,
+ uint32_t rotation)
+{
+ cairo_t *cr;
+ int w, h;
+
+ w = mode->hdisplay;
+ h = mode->vdisplay;
+
+ cr = igt_get_cairo_ctx(data->gfx_fd, &data->fb);
+
+ if (rotation == DRM_ROTATE_180) {
+ cairo_translate(cr, w, h);
+ cairo_rotate(cr, M_PI);
+ }
+
+ /* Paint with 4 squares of Red, Green, White, Blue Clockwise */
+ igt_paint_color(cr, 0, 0, w/2, h/2, 1.0, 0.0, 0.0);
+ igt_paint_color(cr, (w/2)-1, 0, w/2, h/2, 0.0, 1.0, 0.0);
+ igt_paint_color(cr, 0, (h/2)-1, w/2, h/2, 0.0, 0.0, 1.0);
+ igt_paint_color(cr, (w/2)-1, (h/2)-1, w/2, h/2, 1.0, 1.0, 1.0);
+
+ cairo_destroy(cr);
+}
+
static bool prepare_crtc(data_t *data)
{
drmModeModeInfo *mode;
igt_display_t *display = &data->display;
igt_output_t *output = data->output;
- cairo_t *cr;
igt_plane_t *primary, *sprite;
int fb_id;
- int w, h;
igt_output_set_pipe(output, data->pipe);
igt_display_commit(display);
@@ -98,8 +123,6 @@ static bool prepare_crtc(data_t *data)
case DRM_PLANE_TYPE_OVERLAY: /* Sprite */
igt_info("Sprite plane\n");
mode = igt_output_get_mode(output);
- w = mode->hdisplay;
- h = mode->vdisplay;
fb_id = igt_create_fb(data->gfx_fd,
mode->hdisplay, mode->vdisplay,
@@ -107,13 +130,9 @@ static bool prepare_crtc(data_t *data)
false, /* tiled */
&data->fb);
igt_assert(fb_id);
- cr = igt_get_cairo_ctx(data->gfx_fd, &data->fb);
- /* Paint rotated image of 4 colors */
- igt_paint_color(cr, (w/2)-1, (h/2)-1, w/2, h/2, 1.0, 0.0, 0.0);
- igt_paint_color(cr, 0, (h/2)-1, w/2, h/2, 0.0, 1.0, 0.0);
- igt_paint_color(cr, (w/2)-1, 0, w/2, h/2, 0.0, 0.0, 1.0);
- igt_paint_color(cr, 0, 0, w/2, h/2, 1.0, 1.0, 1.0);
+ paint_squares(data, &data->fb, mode, DRM_ROTATE_180);
+
sprite = igt_output_get_plane(output, IGT_PLANE_2);
igt_plane_set_fb(sprite, &data->fb);
igt_display_commit(display);
@@ -121,12 +140,8 @@ static bool prepare_crtc(data_t *data)
/* Collect reference crc */
igt_pipe_crc_collect_crc(data->pipe_crc, &data->ref_crc[1]);
- /* Paint with 4 squares of Red, Green, White, Blue Clockwise */
- igt_paint_color(cr, 0, 0, w/2, h/2, 1.0, 0.0, 0.0);
- igt_paint_color(cr, (w/2)-1, 0, w/2, h/2, 0.0, 1.0, 0.0);
- igt_paint_color(cr, 0, (h/2)-1, w/2, h/2, 0.0, 0.0, 1.0);
- igt_paint_color(cr, (w/2)-1, (h/2)-1, w/2, h/2, 1.0, 1.0, 1.0);
- cairo_destroy(cr);
+ paint_squares(data, &data->fb, mode, DRM_ROTATE_0);
+
sprite = igt_output_get_plane(output, IGT_PLANE_2);
igt_plane_set_fb(sprite, &data->fb);
igt_display_commit(display);
@@ -135,8 +150,6 @@ static bool prepare_crtc(data_t *data)
case DRM_PLANE_TYPE_PRIMARY: /* Primary */
igt_info("Primary plane\n");
mode = igt_output_get_mode(output);
- w = mode->hdisplay;
- h = mode->vdisplay;
fb_id = igt_create_fb(data->gfx_fd,
mode->hdisplay, mode->vdisplay,
@@ -144,13 +157,9 @@ static bool prepare_crtc(data_t *data)
false, /* tiled */
&data->fb);
igt_assert(fb_id);
- cr = igt_get_cairo_ctx(data->gfx_fd, &data->fb);
- /* Paint rotated image of 4 colors */
- igt_paint_color(cr, (w/2)-1, (h/2)-1, w/2, h/2, 1.0, 0.2, 0.2);
- igt_paint_color(cr, 0, (h/2)-1, w/2, h/2, 0.2, 1.0, 0.2);
- igt_paint_color(cr, (w/2)-1, 0, w/2, h/2, 0.2, 0.2, 1.0);
- igt_paint_color(cr, 0, 0, w/2, h/2, 0.8, 0.8, 0.8);
+ paint_squares(data, &data->fb, mode, DRM_ROTATE_180);
+
primary = igt_output_get_plane(output, IGT_PLANE_PRIMARY);
igt_plane_set_fb(primary, &data->fb);
igt_display_commit(display);
@@ -158,12 +167,8 @@ static bool prepare_crtc(data_t *data)
/* Collect reference crc */
igt_pipe_crc_collect_crc(data->pipe_crc, &data->ref_crc[0]);
- /* Paint with 4 squares of Red, Green, White, Blue Clockwise */
- igt_paint_color(cr, 0, 0, w/2, h/2, 1.0, 0.2, 0.2);
- igt_paint_color(cr, (w/2)-1, 0, w/2, h/2, 0.2, 1.0, 0.2);
- igt_paint_color(cr, 0, (h/2)-1, w/2, h/2, 0.2, 0.2, 1.0);
- igt_paint_color(cr, (w/2)-1, (h/2)-1, w/2, h/2, 0.8, 0.8, 0.8);
- cairo_destroy(cr);
+ paint_squares(data, &data->fb, mode, DRM_ROTATE_0);
+
primary = igt_output_get_plane(output, IGT_PLANE_PRIMARY);
igt_plane_set_fb(primary, &data->fb);
igt_display_commit(display);
--
1.8.3.1
More information about the Intel-gfx
mailing list