aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2017-04-24 11:14:10 +0200
committerGerd Hoffmann <kraxel@redhat.com>2017-04-24 11:14:10 +0200
commitddcc2a6df2a43baa4409230bf038b2fee5959687 (patch)
treec03664d7b0f911b07d804eaa4ce9c1035a13c37a
parenta45855472178e478c4cca77458542f1beec666dd (diff)
downloaddrminfo-ddcc2a6df2a43baa4409230bf038b2fee5959687.tar.gz
add pixman firmats
-rw-r--r--Makefile4
-rw-r--r--drminfo.c1
-rw-r--r--drmtest.c1
-rw-r--r--drmtools.c57
-rw-r--r--drmtools.h15
-rw-r--r--meson.build2
6 files changed, 66 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 2f6e46e..ebebf03 100644
--- a/Makefile
+++ b/Makefile
@@ -4,8 +4,8 @@ CFLAGS += -Wall
TARGETS := drminfo drmtest gtktest
-drminfo : CFLAGS += $(shell pkg-config --cflags libdrm cairo)
-drminfo : LDLIBS += $(shell pkg-config --libs libdrm cairo)
+drminfo : CFLAGS += $(shell pkg-config --cflags libdrm cairo pixman-1)
+drminfo : LDLIBS += $(shell pkg-config --libs libdrm cairo pixman-1)
drmtest : CFLAGS += $(shell pkg-config --cflags libdrm gbm epoxy cairo cairo-gl pixman-1)
drmtest : LDLIBS += $(shell pkg-config --libs libdrm gbm epoxy cairo cairo-gl pixman-1)
diff --git a/drminfo.c b/drminfo.c
index 275277c..95a9ed4 100644
--- a/drminfo.c
+++ b/drminfo.c
@@ -15,6 +15,7 @@
#include <xf86drmMode.h>
#include <cairo.h>
+#include <pixman.h>
#include "drmtools.h"
diff --git a/drmtest.c b/drmtest.c
index ab7be00..4266149 100644
--- a/drmtest.c
+++ b/drmtest.c
@@ -24,6 +24,7 @@
#include <cairo.h>
#include <cairo-gl.h>
+#include <pixman.h>
#include "drmtools.h"
#include "render.h"
diff --git a/drmtools.c b/drmtools.c
index 8442e44..9c8bf82 100644
--- a/drmtools.c
+++ b/drmtools.c
@@ -14,6 +14,7 @@
#include <xf86drmMode.h>
#include <cairo.h>
+#include <pixman.h>
#include "drmtools.h"
@@ -45,6 +46,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.depth = 24,
.cairo = CAIRO_FORMAT_RGB24,
+ .pixman = PIXMAN_x8r8g8b8,
},{
.name = "30",
.fields = "x:R:G:B",
@@ -52,6 +54,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.depth = 30,
.cairo = CAIRO_FORMAT_RGB30,
+ .pixman = PIXMAN_x2b10g10r10,
},{
.name = "15",
.fields = "x:R:G:B",
@@ -59,6 +62,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.depth = 15,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = PIXMAN_x1r5g5b5,
},{
.name = "16",
.fields = "R:G:B",
@@ -66,6 +70,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.depth = 16,
.cairo = CAIRO_FORMAT_RGB16_565,
+ .pixman = PIXMAN_r5g6b5,
},
/*
@@ -81,6 +86,7 @@ const struct fbformat fmts[] = {
.bpp = 8,
.fourcc = DRM_FORMAT_RGB332,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = PIXMAN_r3g3b2,
},{
.name = FOURCC_NAME(DRM_FORMAT_BGR233),
.fields = "B:G:R",
@@ -88,6 +94,7 @@ const struct fbformat fmts[] = {
.bpp = 8,
.fourcc = DRM_FORMAT_BGR233,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = PIXMAN_b2g3r3,
},
/* -- 16 bpp, rgb --- */
@@ -98,6 +105,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_XRGB4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_x4r4g4b4, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_XBGR4444),
.fields = "x:B:G:R",
@@ -105,6 +113,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_XBGR4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_x4b4g4r4, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBX4444),
.fields = "R:G:B:x",
@@ -112,6 +121,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_RGBX4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRX4444),
.fields = "B:G:R:x",
@@ -119,6 +129,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_BGRX4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_ARGB4444),
.fields = "A:R:G:B",
@@ -126,6 +137,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_ARGB4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a4r4g4b4, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_ABGR4444),
.fields = "A:B:G:R",
@@ -133,6 +145,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_ABGR4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a4b4g4r4, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBA4444),
.fields = "R:G:B:A",
@@ -140,6 +153,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_RGBA4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRA4444),
.fields = "B:G:R:A",
@@ -147,6 +161,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_BGRA4444,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_XRGB1555),
.fields = "x:R:G:B",
@@ -154,6 +169,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_XRGB1555,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_x1r5g5b5, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_XBGR1555),
.fields = "x:B:G:R",
@@ -161,6 +177,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_XBGR1555,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_x1b5g5r5, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBX5551),
.fields = "R:G:B:x",
@@ -168,6 +185,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_RGBX5551,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRX5551),
.fields = "B:G:R:x",
@@ -175,6 +193,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_BGRX5551,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_ARGB1555),
.fields = "A:R:G:B",
@@ -182,6 +201,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_ARGB1555,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a1r5g5b5, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_ABGR1555),
.fields = "A:B:G:R",
@@ -189,6 +209,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_ABGR1555,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a1b5g5r5, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBA5551),
.fields = "R:G:B:A",
@@ -196,6 +217,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_RGBA5551,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRA5551),
.fields = "B:G:R:A",
@@ -203,6 +225,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_BGRA5551,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_RGB565),
.fields = "R:G:B",
@@ -210,6 +233,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_RGB565,
.cairo = LE_BE(CAIRO_FORMAT_RGB16_565, CAIRO_FORMAT_INVALID),
+ .pixman = LE_BE(PIXMAN_r5g6b5, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_BGR565),
.fields = "B:G:R",
@@ -217,6 +241,7 @@ const struct fbformat fmts[] = {
.bpp = 16,
.fourcc = DRM_FORMAT_BGR565,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_b5g6r5, 0),
},
/* --- 24 bpp, rgb --- */
@@ -227,6 +252,7 @@ const struct fbformat fmts[] = {
.bpp = 24,
.fourcc = DRM_FORMAT_RGB888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_r8g8b8, PIXMAN_b8g8r8),
},{
.name = FOURCC_NAME(DRM_FORMAT_BGR888),
.fields = "B:G:R",
@@ -234,6 +260,7 @@ const struct fbformat fmts[] = {
.bpp = 24,
.fourcc = DRM_FORMAT_BGR888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_b8g8r8, PIXMAN_r8g8b8),
},
/* --- 32 bpp, rgb --- */
@@ -244,6 +271,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_XRGB8888,
.cairo = LE_BE(CAIRO_FORMAT_RGB24, CAIRO_FORMAT_INVALID),
+ .pixman = LE_BE(PIXMAN_x8r8g8b8, PIXMAN_b8g8r8x8),
},{
.name = FOURCC_NAME(DRM_FORMAT_XBGR8888),
.fields = "x:B:G:R",
@@ -251,6 +279,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_XBGR8888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_x8b8g8r8, PIXMAN_r8g8b8x8),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBX8888),
.fields = "R:G:B:x",
@@ -258,6 +287,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_RGBX8888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_r8g8b8x8, PIXMAN_x8b8g8r8),
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRX8888),
.fields = "B:G:R:x",
@@ -265,6 +295,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_BGRX8888,
.cairo = LE_BE(CAIRO_FORMAT_INVALID, CAIRO_FORMAT_RGB24),
+ .pixman = LE_BE(PIXMAN_b8g8r8x8, PIXMAN_x8r8g8b8),
},{
.name = FOURCC_NAME(DRM_FORMAT_ARGB8888),
.fields = "A:R:G:B",
@@ -272,6 +303,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_ARGB8888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a8r8g8b8, PIXMAN_b8g8r8a8),
},{
.name = FOURCC_NAME(DRM_FORMAT_ABGR8888),
.fields = "A:B:G:R",
@@ -279,6 +311,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_ABGR8888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a8b8g8r8, PIXMAN_r8g8b8a8),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBA8888),
.fields = "R:G:B:A",
@@ -286,6 +319,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_RGBA8888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_r8g8b8a8, PIXMAN_a8b8g8r8),
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRA8888),
.fields = "B:G:R:A",
@@ -293,13 +327,15 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_BGRA8888,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_b8g8r8a8, PIXMAN_a8r8g8b8),
},{
.name = FOURCC_NAME(DRM_FORMAT_XRGB2101010),
.fields = "x:R:G:B",
.bits = "2:10:10:10",
.bpp = 32,
.fourcc = DRM_FORMAT_XRGB2101010,
- .cairo = LE_BE(CAIRO_FORMAT_RGB30, CAIRO_FORMAT_INVALID)
+ .cairo = LE_BE(CAIRO_FORMAT_RGB30, CAIRO_FORMAT_INVALID),
+ .pixman = LE_BE(PIXMAN_x2r10g10b10, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_XBGR2101010),
.fields = "x:B:G:R",
@@ -307,6 +343,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_XBGR2101010,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_x2b10g10r10, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBX1010102),
.fields = "R:G:B:x",
@@ -314,6 +351,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_RGBX1010102,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRX1010102),
.fields = "B:G:R:x",
@@ -321,6 +359,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_BGRX1010102,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_ARGB2101010),
.fields = "A:R:G:B",
@@ -328,6 +367,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_ARGB2101010,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a2r10g10b10, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_ABGR2101010),
.fields = "A:B:G:R",
@@ -335,6 +375,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_ABGR2101010,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = LE_BE(PIXMAN_a2b10g10r10, 0),
},{
.name = FOURCC_NAME(DRM_FORMAT_RGBA1010102),
.fields = "R:G:B:A",
@@ -342,6 +383,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_RGBA1010102,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_BGRA1010102),
.fields = "B:G:R:A",
@@ -349,6 +391,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_BGRA1010102,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},
/* --- 32 bpp, yuv --- */
@@ -359,6 +402,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_YUYV,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_YVYU),
.fields = "Cb0:Y1:Cr0:Y0",
@@ -366,6 +410,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_YVYU,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_UYVY),
.fields = "Y1:Cr0:Y0:Cb0",
@@ -373,6 +418,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_UYVY,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_VYUY),
.fields = "Y1:Cb0:Y0:Cr0",
@@ -380,6 +426,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_VYUY,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},{
.name = FOURCC_NAME(DRM_FORMAT_AYUV),
.fields = "A:Y:Cb:Cr",
@@ -387,6 +434,7 @@ const struct fbformat fmts[] = {
.bpp = 32,
.fourcc = DRM_FORMAT_AYUV,
.cairo = CAIRO_FORMAT_INVALID,
+ .pixman = 0,
},
};
const uint32_t fmtcnt = sizeof(fmts)/sizeof(fmts[0]);
@@ -522,8 +570,9 @@ void drm_print_format(FILE *fp, const struct fbformat *fmt,
? "fourcc le"
: "legacy cpu " LE_BE("(le)", "(be)"));
if (libs) {
- fprintf(fp, " %s",
- (fmt->cairo == CAIRO_FORMAT_INVALID) ? "" : "cairo");
+ fprintf(fp, " %-5s %-6s",
+ (fmt->cairo != CAIRO_FORMAT_INVALID) ? "cairo" : "",
+ fmt->pixman ? "pixman" : "");
}
fprintf(fp, "\n");
}
@@ -535,7 +584,7 @@ void drm_print_format_hdr(FILE *fp, int indent, bool libs)
"name", "bpp", "fields", "bits",
"type endian");
if (libs) {
- fprintf(fp, " libs");
+ fprintf(fp, " lib support");
}
fprintf(fp, "\n");
}
diff --git a/drmtools.h b/drmtools.h
index d1a3f2f..f3ef2bf 100644
--- a/drmtools.h
+++ b/drmtools.h
@@ -1,11 +1,12 @@
struct fbformat {
- const char name[8];
- const char fields[16];
- const char bits[16];
- uint32_t bpp; /* bytes per pixel */
- uint32_t depth; /* legacy (ADDFB) */
- uint32_t fourcc; /* DRM_FORMAT_* (ADDFB2) */
- cairo_format_t cairo; /* CAIRO_FORMAT_* */
+ const char name[8];
+ const char fields[16];
+ const char bits[16];
+ uint32_t bpp; /* bytes per pixel */
+ uint32_t depth; /* legacy (ADDFB) */
+ uint32_t fourcc; /* DRM_FORMAT_* (ADDFB2) */
+ cairo_format_t cairo; /* CAIRO_FORMAT_* */
+ pixman_format_code_t pixman; /* PIXMAN_* */
};
extern const struct fbformat fmts[];
diff --git a/meson.build b/meson.build
index 3a8e7fc..4722bf9 100644
--- a/meson.build
+++ b/meson.build
@@ -16,7 +16,7 @@ drminfo_srcs = [ 'drminfo.c', 'drmtools.c' ]
drmtest_srcs = [ 'drmtest.c', 'drmtools.c', 'render.c', 'image.c' ]
gtktest_srcs = [ 'gtktest.c', 'render.c', 'image.c' ]
-drminfo_deps = [ libdrm_dep, cairo_dep ]
+drminfo_deps = [ libdrm_dep, cairo_dep, pixman_dep ]
drmtest_deps = [ libdrm_dep, gbm_dep, epoxy_dep,
cairo_dep, cairo_gl_dep, pixman_dep, jpeg_dep ]
gtktest_deps = [ gtk3_dep,