[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