diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2017-10-19 12:09:53 +0100 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2017-10-19 12:09:53 +0100 |
| commit | ba6f0fc25e3c14fbb36f4b5a616a89cd3f1de6d0 (patch) | |
| tree | 2bbf92549c6a4d29ad93374c1bd57e169ec8d9b0 /ui/shader.c | |
| parent | 73b733e6907e1193e562f498272108c95c00868c (diff) | |
| parent | a35179170034b60bcfb997e06bc63258caaf5049 (diff) | |
| download | focaccia-qemu-ba6f0fc25e3c14fbb36f4b5a616a89cd3f1de6d0.tar.gz focaccia-qemu-ba6f0fc25e3c14fbb36f4b5a616a89cd3f1de6d0.zip | |
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>
Diffstat (limited to 'ui/shader.c')
| -rw-r--r-- | ui/shader.c | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/ui/shader.c b/ui/shader.c index 1ffddbef3b..008458bf94 100644 --- a/ui/shader.c +++ b/ui/shader.c @@ -28,9 +28,19 @@ #include "qemu-common.h" #include "ui/shader.h" +#include "shader/texture-blit-vert.h" +#include "shader/texture-blit-flip-vert.h" +#include "shader/texture-blit-frag.h" + +struct QemuGLShader { + GLint texture_blit_prog; + GLint texture_blit_flip_prog; + GLint texture_blit_vao; +}; + /* ---------------------------------------------------------------------- */ -GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog) +static GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog) { static const GLfloat in_position[] = { -1, -1, @@ -60,17 +70,18 @@ GLuint qemu_gl_init_texture_blit(GLint texture_blit_prog) return vao; } -void qemu_gl_run_texture_blit(GLint texture_blit_prog, - GLint texture_blit_vao) +void qemu_gl_run_texture_blit(QemuGLShader *gls, bool flip) { - glUseProgram(texture_blit_prog); - glBindVertexArray(texture_blit_vao); + glUseProgram(flip + ? gls->texture_blit_flip_prog + : gls->texture_blit_prog); + glBindVertexArray(gls->texture_blit_vao); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } /* ---------------------------------------------------------------------- */ -GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src) +static GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src) { GLuint shader; GLint status, length; @@ -94,7 +105,7 @@ GLuint qemu_gl_create_compile_shader(GLenum type, const GLchar *src) return shader; } -GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag) +static GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag) { GLuint program; GLint status, length; @@ -117,8 +128,8 @@ GLuint qemu_gl_create_link_program(GLuint vert, GLuint frag) return program; } -GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src, - const GLchar *frag_src) +static GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src, + const GLchar *frag_src) { GLuint vert_shader, frag_shader, program; @@ -134,3 +145,31 @@ GLuint qemu_gl_create_compile_link_program(const GLchar *vert_src, return program; } + +/* ---------------------------------------------------------------------- */ + +QemuGLShader *qemu_gl_init_shader(void) +{ + QemuGLShader *gls = g_new0(QemuGLShader, 1); + + gls->texture_blit_prog = qemu_gl_create_compile_link_program + (texture_blit_vert_src, texture_blit_frag_src); + gls->texture_blit_flip_prog = qemu_gl_create_compile_link_program + (texture_blit_flip_vert_src, texture_blit_frag_src); + if (!gls->texture_blit_prog || !gls->texture_blit_flip_prog) { + exit(1); + } + + gls->texture_blit_vao = + qemu_gl_init_texture_blit(gls->texture_blit_prog); + + return gls; +} + +void qemu_gl_fini_shader(QemuGLShader *gls) +{ + if (!gls) { + return; + } + g_free(gls); +} |