]>
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 | ||
50 | /* -------------------------------------------------------------------- */ | |
51 | ||
0a323e66 PMD |
52 | typedef struct PixelFormat { |
53 | uint8_t bits_per_pixel; | |
54 | uint8_t bytes_per_pixel; | |
55 | uint8_t depth; /* color depth in bits */ | |
56 | uint32_t rmask, gmask, bmask, amask; | |
57 | uint8_t rshift, gshift, bshift, ashift; | |
58 | uint8_t rmax, gmax, bmax, amax; | |
59 | uint8_t rbits, gbits, bbits, abits; | |
60 | } PixelFormat; | |
61 | ||
a93a3af9 | 62 | PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format); |
1527a25e | 63 | pixman_format_code_t qemu_default_pixman_format(int bpp, bool native_endian); |
a5127bd7 | 64 | pixman_format_code_t qemu_drm_format_to_pixman(uint32_t drm_format); |
8069b73b | 65 | uint32_t qemu_pixman_to_drm_format(pixman_format_code_t pixman); |
d2ec7e24 GH |
66 | int qemu_pixman_get_type(int rshift, int gshift, int bshift); |
67 | pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf); | |
8cd996f4 GH |
68 | bool qemu_pixman_check_format(DisplayChangeListener *dcl, |
69 | pixman_format_code_t format); | |
d2ec7e24 GH |
70 | |
71 | pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format, | |
72 | int width); | |
73 | void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb, | |
bc210eb1 | 74 | int width, int x, int y); |
43c7d8bd GH |
75 | void qemu_pixman_linebuf_copy(pixman_image_t *fb, int width, int x, int y, |
76 | pixman_image_t *linebuf); | |
d9a86569 GH |
77 | pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format, |
78 | pixman_image_t *image); | |
d2ec7e24 GH |
79 | void qemu_pixman_image_unref(pixman_image_t *image); |
80 | ||
867c538f | 81 | pixman_color_t qemu_pixman_color(PixelFormat *pf, uint32_t color); |
b7627952 GH |
82 | pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font, |
83 | unsigned int ch); | |
84 | void qemu_pixman_glyph_render(pixman_image_t *glyph, | |
85 | pixman_image_t *surface, | |
86 | pixman_color_t *fgcol, | |
87 | pixman_color_t *bgcol, | |
88 | int x, int y, int cw, int ch); | |
867c538f | 89 | |
f908475f MAL |
90 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(pixman_image_t, qemu_pixman_image_unref) |
91 | ||
d2ec7e24 | 92 | #endif /* QEMU_PIXMAN_H */ |