All of lore.kernel.org
 help / color / mirror / Atom feed
From: devon.davies@intel.com
To: intel-gfx@lists.freedesktop.org
Cc: Devon Davies <devon.davies@intel.com>
Subject: [PATCH i-g-t] tests/kms_fbc_crc.c: No longer dependant on Cairo A setup function that used to use Cairo to draw 2 rectangles covering the whole screen has been changed to use igt_draw
Date: Fri, 15 Jan 2016 15:42:28 +0000	[thread overview]
Message-ID: <1452872548-4959-1-git-send-email-devon.davies@intel.com> (raw)

From: Devon Davies <devon.davies@intel.com>

tests/kms_frontbuffer_tracking.c: Now builds with DRM_PRIMARY_DISABLE
    Each call to the function drmModeSetPlane now has an addtional NULL in the
    arguments if DRM_PRIMARY_DISABLE is set.

tests/Android.mk: Allow the above tests to be built without Cairo
    Simply removed them from the tests the be skipped.

libs/igt_kms.c: Now builds with DRM_PRIMARY_DISABLE
    I had to define ffs as __builtin_fss due to compiler issues.
    Each call to the function drmModeSetPlane now has an addtional NULL in the
    arguments if DRM_PRIMARY_DISABLE is set.

libs/igt_fb.c: Will now build some functions without Cairo
    Functions which aren't used by the framebuffer compression tests are
    now behind an #if (!defined(ANDROID)) || (defined(ANDROID) &&
    ANDROID_HAS_CAIRO

libs/Android.mk
    igt_fb and igt_kms are no longer ignored if we don't have Cairo.

The tests kms_fbc_crc and kms_frontbuffer_tracking had an unnecessary
dependance on the Cairo graphics engine.
Also, drmModeSetPlane may have an additional argument if DRM_PRIMARY_DISABLE
is set (as it was for me), I have fixed that issue.

Signed-off-by: Devon Davies <devon.davies@intel.com>
---
 lib/Android.mk                   |  4 --
 lib/igt_fb.c                     | 26 ++++++++++++-
 lib/igt_kms.c                    | 15 ++++++--
 tests/Android.mk                 |  5 +++
 tests/kms_fbc_crc.c              | 20 ++++++----
 tests/kms_frontbuffer_tracking.c | 79 +++++++++++++++++++++++++++++++++-------
 6 files changed, 119 insertions(+), 30 deletions(-)

diff --git a/lib/Android.mk b/lib/Android.mk
index badec1e..bbdb051 100644
--- a/lib/Android.mk
+++ b/lib/Android.mk
@@ -37,10 +37,6 @@ ifeq ("${ANDROID_HAS_CAIRO}", "1")
     LOCAL_C_INCLUDES += $(ANDROID_BUILD_TOP)/external/cairo-1.12.16/src
     LOCAL_CFLAGS += -DANDROID_HAS_CAIRO=1 -DIGT_DATADIR=\".\" -DIGT_SRCDIR=\".\"
 else
-skip_lib_list := \
-    igt_kms.c \
-    igt_kms.h \
-    igt_fb.c
     -DANDROID_HAS_CAIRO=0
 endif
 
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index c985824..5acdaa7 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -33,6 +33,7 @@
 #include "igt_fb.h"
 #include "ioctl_wrappers.h"
 
+
 /**
  * SECTION:igt_fb
  * @short_description: Framebuffer handling and drawing library
@@ -52,11 +53,23 @@
  */
 
 /* drm fourcc/cairo format maps */
+#if (!defined(ANDROID)) || (defined(ANDROID) && ANDROID_HAS_CAIRO)
+
 #define DF(did, cid, _bpp, _depth)	\
 	{ DRM_FORMAT_##did, CAIRO_FORMAT_##cid, # did, _bpp, _depth }
+
+#else
+
+#define DF(did, cid, _bpp, _depth)	\
+	{ DRM_FORMAT_##did, # did, _bpp, _depth }
+
+#endif
+
 static struct format_desc_struct {
 	uint32_t drm_id;
+#if (!defined(ANDROID)) || (defined(ANDROID) && ANDROID_HAS_CAIRO)
 	cairo_format_t cairo_id;
+#endif
 	const char *name;
 	int bpp;
 	int depth;
@@ -72,7 +85,6 @@ static struct format_desc_struct {
 #define for_each_format(f)	\
 	for (f = format_desc; f - format_desc < ARRAY_SIZE(format_desc); f++)
 
-
 /* helpers to create nice-looking framebuffers */
 static int create_bo_for_fb(int fd, int width, int height, int bpp,
 			    uint64_t tiling, unsigned bo_size,
@@ -125,6 +137,8 @@ static int create_bo_for_fb(int fd, int width, int height, int bpp,
 	return ret;
 }
 
+#if (!defined(ANDROID)) || (defined(ANDROID) && ANDROID_HAS_CAIRO)
+
 /**
  * igt_paint_color:
  * @cr: cairo drawing context
@@ -394,6 +408,7 @@ void igt_paint_image(cairo_t *cr, const char *filename,
 
 	fclose(f);
 }
+#endif
 
 /**
  * igt_create_fb_with_bo_size:
@@ -494,6 +509,7 @@ unsigned int igt_create_fb(int fd, int width, int height, uint32_t format,
 	return igt_create_fb_with_bo_size(fd, width, height, format, tiling, fb,
 					  0, 0);
 }
+#if (!defined(ANDROID)) || (defined(ANDROID) && ANDROID_HAS_CAIRO)
 
 /**
  * igt_create_color_fb:
@@ -985,6 +1001,7 @@ void igt_write_fb_to_png(int fd, struct igt_fb *fb, const char *filename)
 
 	igt_assert(status == CAIRO_STATUS_SUCCESS);
 }
+#endif
 
 /**
  * igt_remove_fb:
@@ -997,10 +1014,13 @@ void igt_write_fb_to_png(int fd, struct igt_fb *fb, const char *filename)
  */
 void igt_remove_fb(int fd, struct igt_fb *fb)
 {
+#if (!defined(ANDROID)) || (defined(ANDROID) && ANDROID_HAS_CAIRO)
 	cairo_surface_destroy(fb->cairo_surface);
+#endif
 	do_or_die(drmModeRmFB(fd, fb->fb_id));
 	gem_close(fd, fb->gem_handle);
 }
+#if (!defined(ANDROID)) || (defined(ANDROID) && ANDROID_HAS_CAIRO)
 
 /**
  * igt_bpp_depth_to_drm_format:
@@ -1024,6 +1044,8 @@ uint32_t igt_bpp_depth_to_drm_format(int bpp, int depth)
 		     depth);
 }
 
+#endif
+
 /**
  * igt_drm_format_to_bpp:
  * @drm_format: drm fourcc pixel format code
@@ -1062,6 +1084,7 @@ const char *igt_format_str(uint32_t drm_format)
 
 	return "invalid";
 }
+#if (!defined(ANDROID)) || (defined(ANDROID) && ANDROID_HAS_CAIRO)
 
 /**
  * igt_get_all_formats:
@@ -1089,3 +1112,4 @@ void igt_get_all_formats(const uint32_t **formats, int *format_count)
 	*formats = drm_formats;
 	*format_count = ARRAY_SIZE(format_desc);
 }
+#endif
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 497118a..7b682cb 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -49,6 +49,8 @@
 #include "intel_chipset.h"
 #include "igt_debugfs.h"
 
+#define ffs __builtin_ffs
+
 /* list of connectors that need resetting on exit */
 #define MAX_CONNECTORS 32
 static char *forced_connectors[MAX_CONNECTORS + 1];
@@ -1354,8 +1356,11 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 				      IGT_FIXED(0,0), /* src_x */
 				      IGT_FIXED(0,0), /* src_y */
 				      IGT_FIXED(0,0), /* src_w */
-				      IGT_FIXED(0,0) /* src_h */);
-
+				      IGT_FIXED(0,0) /* src_h */
+#if DRM_PRIMARY_DISABLE
+					  , NULL
+#endif
+					  );
 		CHECK_RETURN(ret, fail_on_error);
 	} else if (plane->fb_changed || plane->position_changed ||
 		plane->size_changed) {
@@ -1386,7 +1391,11 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 				      crtc_x, crtc_y,
 				      crtc_w, crtc_h,
 				      src_x, src_y,
-				      src_w, src_h);
+				      src_w, src_h
+#if DRM_PRIMARY_DISABLE
+					  , NULL
+#endif
+					  );
 
 		CHECK_RETURN(ret, fail_on_error);
 	}
diff --git a/tests/Android.mk b/tests/Android.mk
index 8457125..eb287a6 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -65,6 +65,11 @@ else
 
     tmp_list := $(foreach test_name, $(TESTS_progs_M),\
         $(if $(findstring kms_,$(test_name)),$(test_name)))
+
+# kms_fbc_crc and kms_frontbuffer_tracking no longer depend on Cairo
+    tmp_list := $(filter-out kms_fbc_crc, $(tmp_list))
+    tmp_list := $(filter-out kms_frontbuffer_tracking, $(tmp_list))
+
     skip_tests_list += $(tmp_list)
 
     IGT_LOCAL_CFLAGS += -DANDROID_HAS_CAIRO=0
diff --git a/tests/kms_fbc_crc.c b/tests/kms_fbc_crc.c
index 02e95e5..717e891 100644
--- a/tests/kms_fbc_crc.c
+++ b/tests/kms_fbc_crc.c
@@ -336,14 +336,18 @@ static void create_fbs(data_t *data, bool tiled, struct igt_fb *fbs)
 	uint64_t tiling = tiled ? LOCAL_I915_FORMAT_MOD_X_TILED :
 				  LOCAL_DRM_FORMAT_MOD_NONE;
 
-	rc = igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
-				 DRM_FORMAT_XRGB8888, tiling,
-				 0.0, 0.0, 0.0, &fbs[0]);
-	igt_assert(rc);
-	rc = igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
-				 DRM_FORMAT_XRGB8888, tiling,
-				 0.1, 0.1, 0.1, &fbs[1]);
-	igt_assert(rc);
+	unsigned int fb_id;
+
+	fb_id = igt_create_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
+				DRM_FORMAT_XRGB8888, tiling, &fbs[0]);
+	igt_assert(fb_id);
+	igt_draw_fill_fb(data->drm_fd, &fbs[0], 0);
+
+	fb_id = igt_create_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
+				DRM_FORMAT_XRGB8888, tiling, &fbs[1]);
+	igt_assert(fb_id);
+	igt_draw_fill_fb(data->drm_fd, &fbs[1], 0x77);
+
 }
 
 /* Since we want to be really safe that the CRCs are actually what we really
diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c
index e7acc7c..f8b9eca 100644
--- a/tests/kms_frontbuffer_tracking.c
+++ b/tests/kms_frontbuffer_tracking.c
@@ -1079,7 +1079,11 @@ static void unset_all_crtcs(void)
 
 	for (i = 0; i < drm.plane_res->count_planes; i++) {
 		rc = drmModeSetPlane(drm.fd, drm.plane_res->planes[i], 0, 0, 0,
-				     0, 0, 0, 0, 0, 0, 0, 0);
+				     0, 0, 0, 0, 0, 0, 0, 0
+#if DRM_PRIMARY_DISABLE
+				     , NULL
+#endif
+			     );
 		igt_assert_eq(rc, 0);
 	}
 }
@@ -1715,7 +1719,11 @@ static void set_sprite_for_test(const struct test_mode *t,
 			     params->sprite.fb->fb_id, 0, 0, 0,
 			     params->sprite.w, params->sprite.h,
 			     0, 0, params->sprite.w << 16,
-			     params->sprite.h << 16);
+			     params->sprite.h << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert_eq(rc, 0);
 
 	do_assertions(ASSERT_NO_ACTION_CHANGE);
@@ -2220,7 +2228,11 @@ static void set_prim_plane_for_params(struct modeset_params *params)
 			     params->mode->hdisplay,
 			     params->mode->vdisplay,
 			     params->fb.x << 16, params->fb.y << 16,
-			     params->fb.w << 16, params->fb.h << 16);
+			     params->fb.w << 16, params->fb.h << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert(rc == 0);
 }
 
@@ -2406,7 +2418,11 @@ static void move_subtest(const struct test_mode *t)
 					     params->sprite.fb->fb_id, 0,
 					     rect.x, rect.y, rect.w,
 					     rect.h, 0, 0, rect.w << 16,
-					     rect.h << 16);
+					     rect.h << 16
+#if DRM_PRIMARY_DISABLE
+					     , NULL
+#endif
+			     );
 			igt_assert_eq(rc, 0);
 			break;
 		default:
@@ -2463,8 +2479,11 @@ static void onoff_subtest(const struct test_mode *t)
 				break;
 			case PLANE_SPR:
 				rc = drmModeSetPlane(drm.fd, params->sprite_id,
-						     0, 0, 0, 0, 0, 0, 0, 0, 0,
-						     0, 0);
+						     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+#if DRM_PRIMARY_DISABLE
+						     , NULL
+#endif
+			     );
 				igt_assert_eq(rc, 0);
 				break;
 			default:
@@ -2489,7 +2508,11 @@ static void onoff_subtest(const struct test_mode *t)
 						     params->sprite.h, 0,
 						     0,
 						     params->sprite.w << 16,
-						     params->sprite.h << 16);
+						     params->sprite.h << 16
+#if DRM_PRIMARY_DISABLE
+						     , NULL
+#endif
+			     );
 				igt_assert_eq(rc, 0);
 				break;
 			default:
@@ -2561,7 +2584,11 @@ static void fullscreen_plane_subtest(const struct test_mode *t)
 			     fullscreen_fb.fb_id, 0, 0, 0, fullscreen_fb.width,
 			     fullscreen_fb.height, 0, 0,
 			     fullscreen_fb.width << 16,
-			     fullscreen_fb.height << 16);
+			     fullscreen_fb.height << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert_eq(rc, 0);
 	update_wanted_crc(t, &pattern->crcs[t->format][0]);
 
@@ -2581,7 +2608,11 @@ static void fullscreen_plane_subtest(const struct test_mode *t)
 	do_assertions(assertions);
 
 	rc = drmModeSetPlane(drm.fd, params->sprite_id, 0, 0, 0, 0, 0, 0, 0, 0,
-			     0, 0, 0);
+			     0, 0, 0
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert_eq(rc, 0);
 
 	if (t->screen == SCREEN_PRIM)
@@ -2657,7 +2688,11 @@ static void scaledprimary_subtest(const struct test_mode *t)
 			     0, 0,
 			     params->mode->hdisplay, params->mode->vdisplay,
 			     params->fb.x << 16, params->fb.y << 16,
-			     params->fb.w << 16, params->fb.h << 16);
+			     params->fb.w << 16, params->fb.h << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert(rc == 0);
 	do_assertions(DONT_ASSERT_CRC);
 
@@ -2668,7 +2703,11 @@ static void scaledprimary_subtest(const struct test_mode *t)
 			     params->mode->hdisplay, params->mode->vdisplay,
 			     params->fb.x << 16, params->fb.y << 16,
 			     (params->fb.w / 2) << 16,
-			     (params->fb.h / 2) << 16);
+			     (params->fb.h / 2) << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert(rc == 0);
 	do_assertions(DONT_ASSERT_CRC);
 
@@ -2681,7 +2720,11 @@ static void scaledprimary_subtest(const struct test_mode *t)
 			     params->mode->vdisplay / 2,
 			     params->fb.x << 16, params->fb.y << 16,
 			     (params->fb.w / 2) << 16,
-			     (params->fb.h / 2) << 16);
+			     (params->fb.h / 2) << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert(rc == 0);
 	do_assertions(DONT_ASSERT_CRC);
 
@@ -2695,7 +2738,11 @@ static void scaledprimary_subtest(const struct test_mode *t)
 			     (params->fb.x + params->fb.w / 2) << 16,
 			     (params->fb.y + params->fb.h / 2) << 16,
 			     (params->fb.w / 4) << 16,
-			     (params->fb.h / 4) << 16);
+			     (params->fb.h / 4) << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert(rc == 0);
 	do_assertions(DONT_ASSERT_CRC);
 
@@ -2705,7 +2752,11 @@ static void scaledprimary_subtest(const struct test_mode *t)
 			     0, 0,
 			     params->mode->hdisplay, params->mode->vdisplay,
 			     params->fb.x << 16, params->fb.y << 16,
-			     params->fb.w << 16, params->fb.h << 16);
+			     params->fb.w << 16, params->fb.h << 16
+#if DRM_PRIMARY_DISABLE
+			     , NULL
+#endif
+			     );
 	igt_assert(rc == 0);
 	do_assertions(0);
 
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

             reply	other threads:[~2016-01-15 15:42 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-15 15:42 devon.davies [this message]
2016-01-20 19:34 ` [PATCH i-g-t] tests/kms_fbc_crc.c: No longer dependant on Cairo A setup function that used to use Cairo to draw 2 rectangles covering the whole screen has been changed to use igt_draw Zanoni, Paulo R
2016-01-22 15:18   ` Davies, Devon
2016-01-22 17:14     ` Daniel Vetter
2016-01-22 17:02   ` Davies, Devon
2016-01-22 17:12     ` Daniel Vetter
2016-01-22 17:17     ` Ville Syrjälä

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=1452872548-4959-1-git-send-email-devon.davies@intel.com \
    --to=devon.davies@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /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.