]>
Commit | Line | Data |
---|---|---|
daa8e5a0 GH |
1 | /* |
2 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | |
3 | * See the COPYING file in the top-level directory. | |
4 | */ | |
5 | ||
d2ec7e24 GH |
6 | #ifndef QEMU_PIXMAN_H |
7 | #define QEMU_PIXMAN_H | |
8 | ||
092bb306 | 9 | /* pixman-0.16.0 headers have a redundant declaration */ |
e6f53fd5 | 10 | #pragma GCC diagnostic push |
092bb306 | 11 | #pragma GCC diagnostic ignored "-Wredundant-decls" |
d2ec7e24 | 12 | #include <pixman.h> |
e6f53fd5 | 13 | #pragma GCC diagnostic pop |
d2ec7e24 | 14 | |
d2ec7e24 GH |
15 | /* |
16 | * pixman image formats are defined to be native endian, | |
17 | * that means host byte order on qemu. So we go define | |
18 | * fixed formats here for cases where it is needed, like | |
19 | * feeding libjpeg / libpng and writing screenshots. | |
20 | */ | |
21 | ||
e03b5686 | 22 | #if HOST_BIG_ENDIAN |
d2ec7e24 | 23 | # define PIXMAN_BE_r8g8b8 PIXMAN_r8g8b8 |
43db7c3d GH |
24 | # define PIXMAN_BE_x8r8g8b8 PIXMAN_x8r8g8b8 |
25 | # define PIXMAN_BE_a8r8g8b8 PIXMAN_a8r8g8b8 | |
26 | # define PIXMAN_BE_b8g8r8x8 PIXMAN_b8g8r8x8 | |
27 | # define PIXMAN_BE_b8g8r8a8 PIXMAN_b8g8r8a8 | |
28 | # define PIXMAN_BE_r8g8b8x8 PIXMAN_r8g8b8x8 | |
29 | # define PIXMAN_BE_r8g8b8a8 PIXMAN_r8g8b8a8 | |
30 | # define PIXMAN_BE_x8b8g8r8 PIXMAN_x8b8g8r8 | |
31 | # define PIXMAN_BE_a8b8g8r8 PIXMAN_a8b8g8r8 | |
a5127bd7 GH |
32 | # define PIXMAN_LE_r8g8b8 PIXMAN_b8g8r8 |
33 | # define PIXMAN_LE_a8r8g8b8 PIXMAN_b8g8r8a8 | |
c1d37cd3 | 34 | # define PIXMAN_LE_x8r8g8b8 PIXMAN_b8g8r8x8 |
d2ec7e24 GH |
35 | #else |
36 | # define PIXMAN_BE_r8g8b8 PIXMAN_b8g8r8 | |
43db7c3d GH |
37 | # define PIXMAN_BE_x8r8g8b8 PIXMAN_b8g8r8x8 |
38 | # define PIXMAN_BE_a8r8g8b8 PIXMAN_b8g8r8a8 | |
39 | # define PIXMAN_BE_b8g8r8x8 PIXMAN_x8r8g8b8 | |
40 | # define PIXMAN_BE_b8g8r8a8 PIXMAN_a8r8g8b8 | |
41 | # define PIXMAN_BE_r8g8b8x8 PIXMAN_x8b8g8r8 | |
42 | # define PIXMAN_BE_r8g8b8a8 PIXMAN_a8b8g8r8 | |
43 | # define PIXMAN_BE_x8b8g8r8 PIXMAN_r8g8b8x8 | |
44 | # define PIXMAN_BE_a8b8g8r8 PIXMAN_r8g8b8a8 | |
a5127bd7 GH |
45 | # define PIXMAN_LE_r8g8b8 PIXMAN_r8g8b8 |
46 | # define PIXMAN_LE_a8r8g8b8 PIXMAN_a8r8g8b8 | |
c1d37cd3 | 47 | # define PIXMAN_LE_x8r8g8b8 PIXMAN_x8r8g8b8 |
d2ec7e24 GH |
48 | #endif |
49 | ||
1ece6777 MAL |
50 | #define QEMU_PIXMAN_COLOR(r, g, b) \ |
51 | { .red = r << 8, .green = g << 8, .blue = b << 8, .alpha = 0xffff } | |
52 | ||
53 | #define QEMU_PIXMAN_COLOR_BLACK QEMU_PIXMAN_COLOR(0x00, 0x00, 0x00) | |
54 | #define QEMU_PIXMAN_COLOR_GRAY QEMU_PIXMAN_COLOR(0xaa, 0xaa, 0xaa) | |
55 | ||
d2ec7e24 GH |
56 | /* -------------------------------------------------------------------- */ |
57 | ||
0a323e66 PMD |
58 | typedef struct PixelFormat { |
59 | uint8_t bits_per_pixel; | |
60 | uint8_t bytes_per_pixel; | |
61 | uint8_t depth; /* color depth in bits */ | |
62 | uint32_t rmask, gmask, bmask, amask; | |
63 | uint8_t rshift, gshift, bshift, ashift; | |
64 | uint8_t rmax, gmax, bmax, amax; | |
65 | uint8_t rbits, gbits, bbits, abits; | |
66 | } PixelFormat; | |
67 | ||
a93a3af9 | 68 | PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format); |
1527a25e | 69 | pixman_format_code_t qemu_default_pixman_format(int bpp, bool native_endian); |
a5127bd7 | 70 | pixman_format_code_t qemu_drm_format_to_pixman(uint32_t drm_format); |
8069b73b | 71 | uint32_t qemu_pixman_to_drm_format(pixman_format_code_t pixman); |
d2ec7e24 GH |
72 | int qemu_pixman_get_type(int rshift, int gshift, int bshift); |
73 | pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf); | |
8cd996f4 GH |
74 | bool qemu_pixman_check_format(DisplayChangeListener *dcl, |
75 | pixman_format_code_t format); | |
d2ec7e24 GH |
76 | |
77 | pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format, | |
78 | int width); | |
79 | void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb, | |
bc210eb1 | 80 | int width, int x, int y); |
d9a86569 GH |
81 | pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format, |
82 | pixman_image_t *image); | |
d2ec7e24 GH |
83 | void qemu_pixman_image_unref(pixman_image_t *image); |
84 | ||
b7627952 GH |
85 | pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font, |
86 | unsigned int ch); | |
87 | void qemu_pixman_glyph_render(pixman_image_t *glyph, | |
88 | pixman_image_t *surface, | |
89 | pixman_color_t *fgcol, | |
90 | pixman_color_t *bgcol, | |
91 | int x, int y, int cw, int ch); | |
867c538f | 92 | |
f908475f MAL |
93 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(pixman_image_t, qemu_pixman_image_unref) |
94 | ||
d2ec7e24 | 95 | #endif /* QEMU_PIXMAN_H */ |