summaryrefslogtreecommitdiff
path: root/rendercheck.h
diff options
context:
space:
mode:
Diffstat (limited to 'rendercheck.h')
-rw-r--r--rendercheck.h51
1 files changed, 44 insertions, 7 deletions
diff --git a/rendercheck.h b/rendercheck.h
index 2195cb4..f0fa7b7 100644
--- a/rendercheck.h
+++ b/rendercheck.h
@@ -64,6 +64,19 @@ struct op_info {
bool disabled;
};
+struct rendercheck_test_result {
+ int tests;
+ int passed;
+};
+
+static inline void
+record_result(struct rendercheck_test_result *result, bool success)
+{
+ result->tests++;
+ if (success)
+ result->passed++;
+}
+
#define TEST_FILL 0x0001
#define TEST_DSTCOORDS 0x0002
#define TEST_SRCCOORDS 0x0004
@@ -77,8 +90,27 @@ struct op_info {
#define TEST_REPEAT 0x0400
#define TEST_TRIANGLES 0x0800
#define TEST_BUG7366 0x1000
-#define TEST_GTK_ARGB_XBGR 0x2000
-#define TEST_LIBREOFFICE_XRGB 0x4000
+#define TEST_gtk_argb_xbgr 0x2000
+#define TEST_libreoffice_xrgb 0x4000
+
+struct rendercheck_test {
+ int bit;
+ const char *arg_name;
+ const char *long_name;
+ struct rendercheck_test_result (*func)(Display *dpy);
+};
+
+#define DECLARE_RENDERCHECK_TEST(name) \
+ const struct rendercheck_test test_desc_##name \
+ __attribute__ ((section ("test_section")))
+
+#define DECLARE_RENDERCHECK_ARG_TEST(arg_name_, long_name_, func_) \
+ DECLARE_RENDERCHECK_TEST(arg_name_) = { \
+ .bit = TEST_##arg_name_, \
+ .arg_name = #arg_name_, \
+ .long_name = long_name_, \
+ .func = func_, \
+ }
struct render_format {
XRenderPictFormat *format;
@@ -88,6 +120,12 @@ struct render_format {
extern struct render_format *formats;
extern int nformats;
+/* Storage that will point at the start and end of the ELF section for test
+ * structs. These are automatically set up by the linker when placing things
+ * in their sections.
+ */
+extern struct rendercheck_test __start_test_section, __stop_test_section;
+
extern int pixmap_move_iter;
extern int win_width, win_height;
extern struct op_info ops[];
@@ -226,8 +264,7 @@ trifan_test(Display *dpy, picture_info *win, picture_info *dst, int op,
bool
bug7366_test(Display *dpy);
-bool
-gtk_argb_xbgr_test(Display *dpy);
-
-bool
-libreoffice_xrgb_test(Display *dpy, bool invert);
+#define for_each_test(test) \
+ for (struct rendercheck_test *test = &__start_test_section; \
+ test < &__stop_test_section; \
+ test++)