[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 3/4] ui/console: Precautionary glBindTexture and surf
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 3/4] ui/console: Precautionary glBindTexture and surface->texture validation in surface_gl_update_texture |
Date: |
Fri, 17 May 2019 18:12:40 +0200 |
From: HOU Qiming <address@hidden>
In a GVT-g setup with dmabuf and GTK GUI, the current 2D texture at
surface_gl_update_texture is not necessarily
surface->texture. Adding a glBindTexture fixes related crashes and
artifacts, and is generally more secure.
Signed-off-by: HOU Qiming <address@hidden>
Tested-by: Marcel Apfelbaum<address@hidden>
Signed-off-by: Marcel Apfelbaum <address@hidden>
Message-id: address@hidden
[fixed malformed patch, rebase to master]
Signed-off-by: Marcel Apfelbaum <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
ui/console-gl.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/ui/console-gl.c b/ui/console-gl.c
index a56e1cd8ebce..c1cb3bd67359 100644
--- a/ui/console-gl.c
+++ b/ui/console-gl.c
@@ -92,13 +92,17 @@ void surface_gl_update_texture(QemuGLShader *gls,
assert(gls);
- glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT,
- surface_stride(surface) / surface_bytes_per_pixel(surface));
- glTexSubImage2D(GL_TEXTURE_2D, 0,
- x, y, w, h,
- surface->glformat, surface->gltype,
- data + surface_stride(surface) * y
- + surface_bytes_per_pixel(surface) * x);
+ if (surface->texture) {
+ glBindTexture(GL_TEXTURE_2D, surface->texture);
+ glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT,
+ surface_stride(surface)
+ / surface_bytes_per_pixel(surface));
+ glTexSubImage2D(GL_TEXTURE_2D, 0,
+ x, y, w, h,
+ surface->glformat, surface->gltype,
+ data + surface_stride(surface) * y
+ + surface_bytes_per_pixel(surface) * x);
+ }
}
void surface_gl_render_texture(QemuGLShader *gls,
--
2.18.1