mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
ui: opengl updates for dma-buf support.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJZ5eXgAAoJEEy22O7T6HE4nhEQANHY8Exu2HFGKHbd59IR7MAl jc3CiT5tc9/HGcPuhUw5BuEBpd053/COZQktSTAjOUYo7tDmwM+dbEz5SU0dIVXf hu1ZoAvgOmC+X+TZRY2YyFrjvwjORRxATxnLlg3ETTDbaEu8EI4G0xA8NYox7j1X nPduAsSEK4YiPcOkfbi2LmQIaLE4phtmFnVed0cLWG0hE1n1KWDu0TQGQB4ZNLb1 t5RtEc/qLrkVSGupLy0lwBIlMGAFZzjmr2co13IpPd6Weow8v++c68aO6PtAWQWA pFhDuWwENg/LshyHa2tgWg+QaGl5p+306fVq79RX23juLZ5OaPyPtuptL2uXen5N 74GroqLwkbl9TabjLpmNGGLvwKwV5cLtmpGW/t4jAX0fhb0RjfMwIeazgeWkifED z4o7tkXTR9EUc+6nHYXbdy5okmxBXv3JvDM9LAMG1d3c4T9VRsKJJMwoPclbkwi1 SxGLoYvz9IU4VjYAkFgoeYeKGX9UbJPzKp3kyuczZEAAm8Gd9uaAhCYvIk9nE/Mi JlPPfz1J8EerdD2mJjbIMZvz/7mvcrkRhQBzM/bTUDxuVTdWVrD+mP5qoq7XuApi 0GgMJbubYEBSBsD3tpRArSOkLmoRanH9CaGetY5o2m4p+BaQ7ssiCQ5oPczrW4lj L83OfkWx4PiBB5swQHv1 =P3Cr -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/opengl-20171017-pull-request' into staging ui: opengl updates for dma-buf support. # gpg: Signature made Tue 17 Oct 2017 12:13:36 BST # gpg: using RSA key 0x4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/opengl-20171017-pull-request: egl-headless: add dmabuf support egl-helpers: add egl_texture_blit and egl_texture_blend egl-helpers: add dmabuf import support opengl: add flipping vertex shader opengl: move shader init from console-gl.c to shader.c console: add support for dmabufs Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
ba6f0fc25e
18 changed files with 283 additions and 75 deletions
|
@ -5,12 +5,14 @@
|
|||
#include "qom/object.h"
|
||||
#include "qapi/qmp/qdict.h"
|
||||
#include "qemu/notify.h"
|
||||
#include "qemu/typedefs.h"
|
||||
#include "qapi-types.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
#ifdef CONFIG_OPENGL
|
||||
# include <epoxy/gl.h>
|
||||
# include "ui/shader.h"
|
||||
#endif
|
||||
|
||||
/* keyboard/mouse support */
|
||||
|
@ -180,6 +182,15 @@ struct QEMUGLParams {
|
|||
int minor_ver;
|
||||
};
|
||||
|
||||
struct QemuDmaBuf {
|
||||
int fd;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t stride;
|
||||
uint32_t fourcc;
|
||||
uint32_t texture;
|
||||
};
|
||||
|
||||
typedef struct DisplayChangeListenerOps {
|
||||
const char *dpy_name;
|
||||
|
||||
|
@ -220,6 +231,13 @@ typedef struct DisplayChangeListenerOps {
|
|||
uint32_t backing_height,
|
||||
uint32_t x, uint32_t y,
|
||||
uint32_t w, uint32_t h);
|
||||
void (*dpy_gl_scanout_dmabuf)(DisplayChangeListener *dcl,
|
||||
QemuDmaBuf *dmabuf);
|
||||
void (*dpy_gl_cursor_dmabuf)(DisplayChangeListener *dcl,
|
||||
QemuDmaBuf *dmabuf,
|
||||
uint32_t pos_x, uint32_t pos_y);
|
||||
void (*dpy_gl_release_dmabuf)(DisplayChangeListener *dcl,
|
||||
QemuDmaBuf *dmabuf);
|
||||
void (*dpy_gl_update)(DisplayChangeListener *dcl,
|
||||
uint32_t x, uint32_t y, uint32_t w, uint32_t h);
|
||||
|
||||
|
@ -288,6 +306,13 @@ void dpy_gl_scanout_texture(QemuConsole *con,
|
|||
uint32_t backing_id, bool backing_y_0_top,
|
||||
uint32_t backing_width, uint32_t backing_height,
|
||||
uint32_t x, uint32_t y, uint32_t w, uint32_t h);
|
||||
void dpy_gl_scanout_dmabuf(QemuConsole *con,
|
||||
QemuDmaBuf *dmabuf);
|
||||
void dpy_gl_cursor_dmabuf(QemuConsole *con,
|
||||
QemuDmaBuf *dmabuf,
|
||||
uint32_t pos_x, uint32_t pos_y);
|
||||
void dpy_gl_release_dmabuf(QemuConsole *con,
|
||||
QemuDmaBuf *dmabuf);
|
||||
void dpy_gl_update(QemuConsole *con,
|
||||
uint32_t x, uint32_t y, uint32_t w, uint32_t h);
|
||||
|
||||
|
@ -298,6 +323,7 @@ int dpy_gl_ctx_make_current(QemuConsole *con, QEMUGLContext ctx);
|
|||
QEMUGLContext dpy_gl_ctx_get_current(QemuConsole *con);
|
||||
|
||||
bool console_has_gl(QemuConsole *con);
|
||||
bool console_has_gl_dmabuf(QemuConsole *con);
|
||||
|
||||
static inline int surface_stride(DisplaySurface *s)
|
||||
{
|
||||
|
@ -390,22 +416,19 @@ void qemu_console_resize(QemuConsole *con, int width, int height);
|
|||
DisplaySurface *qemu_console_surface(QemuConsole *con);
|
||||
|
||||
/* console-gl.c */
|
||||
typedef struct ConsoleGLState ConsoleGLState;
|
||||
#ifdef CONFIG_OPENGL
|
||||
ConsoleGLState *console_gl_init_context(void);
|
||||
void console_gl_fini_context(ConsoleGLState *gls);
|
||||
bool console_gl_check_format(DisplayChangeListener *dcl,
|
||||
pixman_format_code_t format);
|
||||
void surface_gl_create_texture(ConsoleGLState *gls,
|
||||
void surface_gl_create_texture(QemuGLShader *gls,
|
||||
DisplaySurface *surface);
|
||||
void surface_gl_update_texture(ConsoleGLState *gls,
|
||||
void surface_gl_update_texture(QemuGLShader *gls,
|
||||
DisplaySurface *surface,
|
||||
int x, int y, int w, int h);
|
||||
void surface_gl_render_texture(ConsoleGLState *gls,
|
||||
void surface_gl_render_texture(QemuGLShader *gls,
|
||||
DisplaySurface *surface);
|
||||
void surface_gl_destroy_texture(ConsoleGLState *gls,
|
||||
void surface_gl_destroy_texture(QemuGLShader *gls,
|
||||
DisplaySurface *surface);
|
||||
void surface_gl_setup_viewport(ConsoleGLState *gls,
|
||||
void surface_gl_setup_viewport(QemuGLShader *gls,
|
||||
DisplaySurface *surface,
|
||||
int ww, int wh);
|
||||
#endif
|
||||
|
|
|
@ -24,6 +24,10 @@ void egl_fb_setup_new_tex(egl_fb *fb, int width, int height);
|
|||
void egl_fb_blit(egl_fb *dst, egl_fb *src, bool flip);
|
||||
void egl_fb_read(void *dst, egl_fb *src);
|
||||
|
||||
void egl_texture_blit(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip);
|
||||
void egl_texture_blend(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip,
|
||||
int x, int y);
|
||||
|
||||
#ifdef CONFIG_OPENGL_DMABUF
|
||||
|
||||
extern int qemu_egl_rn_fd;
|
||||
|
@ -33,6 +37,9 @@ extern EGLContext qemu_egl_rn_ctx;
|
|||
int egl_rendernode_init(const char *rendernode);
|
||||
int egl_get_fd_for_texture(uint32_t tex_id, EGLint *stride, EGLint *fourcc);
|
||||
|
||||
void egl_dmabuf_import_texture(QemuDmaBuf *dmabuf);
|
||||
void egl_dmabuf_release_texture(QemuDmaBuf *dmabuf);
|
||||
|
||||
#endif
|
||||
|
||||
EGLSurface qemu_egl_init_surface_x11(EGLContext ectx, Window win);
|
||||
|
|
|
@ -47,7 +47,7 @@ typedef struct VirtualGfxConsole {
|
|||
double scale_x;
|
||||
double scale_y;
|
||||
#if defined(CONFIG_OPENGL)
|
||||
ConsoleGLState *gls;
|
||||
QemuGLShader *gls;
|
||||
EGLContext ectx;
|
||||
EGLSurface esurface;
|
||||
int glupdates;
|
||||
|
|
|
@ -26,7 +26,7 @@ struct sdl2_console {
|
|||
int idle_counter;
|
||||
SDL_GLContext winctx;
|
||||
#ifdef CONFIG_OPENGL
|
||||
ConsoleGLState *gls;
|
||||
QemuGLShader *gls;
|
||||
egl_fb guest_fb;
|
||||
egl_fb win_fb;
|
||||
bool y0_top;
|
||||
|
|
|
@ -3,13 +3,11 @@
|
|||
|
||||
#include <epoxy/gl.h>
|
||||
|
||||
GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog);
|
||||
void qemu_gl_run_texture_blit(GLint texture_blit_prog,
|
||||
GLint texture_blit_vao);
|
||||
typedef struct QemuGLShader QemuGLShader;
|
||||
|
||||
GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src);
|
||||
GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag);
|
||||
GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src,
|
||||
const GLchar *frag_src);
|
||||
void qemu_gl_run_texture_blit(QemuGLShader *gls, bool flip);
|
||||
|
||||
QemuGLShader *qemu_gl_init_shader(void);
|
||||
void qemu_gl_fini_shader(QemuGLShader *gls);
|
||||
|
||||
#endif /* QEMU_SHADER_H */
|
||||
|
|
|
@ -119,7 +119,7 @@ struct SimpleSpiceDisplay {
|
|||
/* opengl rendering */
|
||||
QEMUBH *gl_unblock_bh;
|
||||
QEMUTimer *gl_unblock_timer;
|
||||
ConsoleGLState *gls;
|
||||
QemuGLShader *gls;
|
||||
int gl_updates;
|
||||
bool have_scanout;
|
||||
bool have_surface;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue