2 * SPDX-License-Identifier: GPL-2.0-or-later
8 #include "ui/qemu-pixman.h"
11 # include <epoxy/gl.h>
12 # include "ui/shader.h"
15 #define QEMU_ALLOCATED_FLAG 0x01
16 #define QEMU_PLACEHOLDER_FLAG 0x02
18 typedef struct DisplaySurface
{
19 pixman_image_t
*image
;
26 qemu_pixman_shareable share_handle
;
27 uint32_t share_handle_offset
;
30 PixelFormat
qemu_default_pixelformat(int bpp
);
32 DisplaySurface
*qemu_create_displaysurface_from(int width
, int height
,
33 pixman_format_code_t format
,
34 int linesize
, uint8_t *data
);
35 DisplaySurface
*qemu_create_displaysurface_pixman(pixman_image_t
*image
);
36 DisplaySurface
*qemu_create_placeholder_surface(int w
, int h
,
39 void qemu_displaysurface_set_share_handle(DisplaySurface
*surface
,
40 qemu_pixman_shareable handle
,
43 DisplaySurface
*qemu_create_displaysurface(int width
, int height
);
44 void qemu_free_displaysurface(DisplaySurface
*surface
);
46 static inline int surface_is_allocated(DisplaySurface
*surface
)
48 return surface
->flags
& QEMU_ALLOCATED_FLAG
;
51 static inline int surface_is_placeholder(DisplaySurface
*surface
)
53 return surface
->flags
& QEMU_PLACEHOLDER_FLAG
;
56 static inline int surface_stride(DisplaySurface
*s
)
58 return pixman_image_get_stride(s
->image
);
61 static inline void *surface_data(DisplaySurface
*s
)
63 return pixman_image_get_data(s
->image
);
66 static inline int surface_width(DisplaySurface
*s
)
68 return pixman_image_get_width(s
->image
);
71 static inline int surface_height(DisplaySurface
*s
)
73 return pixman_image_get_height(s
->image
);
76 static inline pixman_format_code_t
surface_format(DisplaySurface
*s
)
78 return pixman_image_get_format(s
->image
);
81 static inline int surface_bits_per_pixel(DisplaySurface
*s
)
83 int bits
= PIXMAN_FORMAT_BPP(surface_format(s
));
87 static inline int surface_bytes_per_pixel(DisplaySurface
*s
)
89 int bits
= PIXMAN_FORMAT_BPP(surface_format(s
));
90 return DIV_ROUND_UP(bits
, 8);