[Spice-devel] [PATCH RFC 04/12] Save and allow to retrieve texture information in Qxl
Frediano Ziglio
fziglio at redhat.com
Fri Jul 15 13:49:29 UTC 2016
Similar interface for storing/retrieving scanout.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
server/red-qxl.c | 20 ++++++++++++++++++++
server/red-qxl.h | 11 +++++++++++
2 files changed, 31 insertions(+)
diff --git a/server/red-qxl.c b/server/red-qxl.c
index 7a68144..1a951f8 100644
--- a/server/red-qxl.c
+++ b/server/red-qxl.c
@@ -64,6 +64,7 @@ struct QXLState {
pthread_mutex_t scanout_mutex;
SpiceMsgDisplayGlScanoutUnix scanout;
+ RedGlTexture texture;
struct AsyncCommand *gl_draw_async;
};
@@ -857,6 +858,25 @@ void red_qxl_put_gl_scanout(QXLInstance *qxl, SpiceMsgDisplayGlScanoutUnix *scan
}
}
+RedGlTexture *red_qxl_get_gl_texture(QXLInstance *qxl)
+{
+ QXLState *st = qxl->st;
+
+ pthread_mutex_lock(&st->scanout_mutex);
+ if (st->texture.egl_display && st->texture.tex_id) {
+ return &st->texture;
+ }
+ pthread_mutex_unlock(&st->scanout_mutex);
+ return NULL;
+}
+
+void red_qxl_put_gl_texture(QXLInstance *qxl, RedGlTexture *texture)
+{
+ if (texture) {
+ pthread_mutex_unlock(&qxl->st->scanout_mutex);
+ }
+}
+
SPICE_GNUC_VISIBLE
void spice_qxl_gl_init(QXLInstance *qxl,
void *egl_display,
diff --git a/server/red-qxl.h b/server/red-qxl.h
index 00c5486..412afe2 100644
--- a/server/red-qxl.h
+++ b/server/red-qxl.h
@@ -23,6 +23,15 @@
typedef struct AsyncCommand AsyncCommand;
+typedef struct {
+ void *egl_display;
+ void *egl_context;
+ uint32_t tex_id;
+ uint32_t width;
+ uint32_t height;
+ uint32_t flags;
+} RedGlTexture;
+
void red_qxl_init(SpiceServer *reds, QXLInstance *qxl);
void red_qxl_on_ic_change(QXLInstance *qxl, SpiceImageCompression ic);
@@ -42,6 +51,8 @@ gboolean red_qxl_get_primary_active(QXLInstance *qxl);
gboolean red_qxl_get_allow_client_mouse(QXLInstance *qxl, gint *x_res, gint *y_res);
SpiceMsgDisplayGlScanoutUnix *red_qxl_get_gl_scanout(QXLInstance *qxl);
void red_qxl_put_gl_scanout(QXLInstance *qxl, SpiceMsgDisplayGlScanoutUnix *scanout);
+RedGlTexture *red_qxl_get_gl_texture(QXLInstance *qxl);
+void red_qxl_put_gl_texture(QXLInstance *qxl, RedGlTexture *texture);
void red_qxl_gl_draw_async_complete(QXLInstance *qxl);
int red_qxl_check_qxl_version(QXLInstance *qxl, int major, int minor);
SpiceServer* red_qxl_get_server(QXLState *qxl);
--
2.7.4
More information about the Spice-devel
mailing list