1#ifndef EGL_HELPERS_H
2#define EGL_HELPERS_H
3
4#include <epoxy/gl.h>
5#include <epoxy/egl.h>
6#ifdef CONFIG_GBM
7#include <gbm.h>
8#endif
9#include "ui/console.h"
10#include "ui/shader.h"
11
12extern EGLDisplay *qemu_egl_display;
13extern EGLConfig qemu_egl_config;
14extern DisplayGLMode qemu_egl_mode;
15
16typedef struct egl_fb {
17 int width;
18 int height;
19 GLuint texture;
20 GLuint framebuffer;
21 bool delete_texture;
22} egl_fb;
23
24void egl_fb_destroy(egl_fb *fb);
25void egl_fb_setup_default(egl_fb *fb, int width, int height);
26void egl_fb_setup_for_tex(egl_fb *fb, int width, int height,
27 GLuint texture, bool delete);
28void egl_fb_setup_new_tex(egl_fb *fb, int width, int height);
29void egl_fb_blit(egl_fb *dst, egl_fb *src, bool flip);
30void egl_fb_read(DisplaySurface *dst, egl_fb *src);
31
32void egl_texture_blit(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip);
33void egl_texture_blend(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip,
34 int x, int y, double scale_x, double scale_y);
35
36#ifdef CONFIG_GBM
37
38extern int qemu_egl_rn_fd;
39extern struct gbm_device *qemu_egl_rn_gbm_dev;
40extern EGLContext qemu_egl_rn_ctx;
41
42int egl_rendernode_init(const char *rendernode, DisplayGLMode mode);
43int egl_get_fd_for_texture(uint32_t tex_id, EGLint *stride, EGLint *fourcc,
44 EGLuint64KHR *modifier);
45
46void egl_dmabuf_import_texture(QemuDmaBuf *dmabuf);
47void egl_dmabuf_release_texture(QemuDmaBuf *dmabuf);
48
49#endif
50
51EGLSurface qemu_egl_init_surface_x11(EGLContext ectx, EGLNativeWindowType win);
52
53#if defined(CONFIG_X11) || defined(CONFIG_GBM)
54
55int qemu_egl_init_dpy_x11(EGLNativeDisplayType dpy, DisplayGLMode mode);
56int qemu_egl_init_dpy_mesa(EGLNativeDisplayType dpy, DisplayGLMode mode);
57
58#endif
59
60EGLContext qemu_egl_init_ctx(void);
61bool qemu_egl_has_dmabuf(void);
62
63#endif
64