summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-09-14 00:42:48 +0300
committerAlon Levy <alevy@redhat.com>2012-10-23 18:46:59 +0200
commitfaccd43e106cf8f9a0987a4c6ecc839cc2b8424f (patch)
tree396ca5fe0018a04287cf431357c6a31ddb06a9ef
parent2bd57d49a2f0bafdb04d3fd99b7ed8a25c00ad04 (diff)
xspice: implement client capabilities
-rw-r--r--src/qxl.h3
-rw-r--r--src/qxl_driver.c5
-rw-r--r--src/spiceqxl_display.c15
3 files changed, 23 insertions, 0 deletions
diff --git a/src/qxl.h b/src/qxl.h
index f458ac2..8b4ae4b 100644
--- a/src/qxl.h
+++ b/src/qxl.h
@@ -307,6 +307,9 @@ struct _qxl_screen_t
uint32_t bytes_pp;
uint8_t *data, *flipped;
} guest_primary;
+
+ uint8_t client_present;
+ uint8_t client_capabilities[58];
#endif /* XSPICE */
};
diff --git a/src/qxl_driver.c b/src/qxl_driver.c
index 2faf3ca..db72c8d 100644
--- a/src/qxl_driver.c
+++ b/src/qxl_driver.c
@@ -1597,8 +1597,13 @@ can_accelerate_picture (PicturePtr pict)
return TRUE;
}
+#ifdef XSPICE
+#define QXL_HAS_CAP(qxl, cap) \
+ (((qxl)->client_capabilities[(cap) / 8]) & (1 << ((cap) % 8)))
+#else
#define QXL_HAS_CAP(qxl, cap) \
(((qxl)->rom->client_capabilities[(cap) / 8]) & (1 << ((cap) % 8)))
+#endif
static Bool
qxl_has_composite (qxl_screen_t *qxl)
diff --git a/src/spiceqxl_display.c b/src/spiceqxl_display.c
index b1ce557..d19e054 100644
--- a/src/spiceqxl_display.c
+++ b/src/spiceqxl_display.c
@@ -307,6 +307,17 @@ static int interface_flush_resources(QXLInstance *sin)
return ret;
}
+#if SPICE_SERVER_VERSION >= 0x000b04
+static void interface_set_client_capabilities(QXLInstance *sin,
+ uint8_t client_present,
+ uint8_t caps[58])
+{
+ qxl_screen_t *qxl = container_of(sin, qxl_screen_t, display_sin);
+
+ memcpy(qxl->client_capabilities, caps, sizeof(qxl->client_capabilities));
+ qxl->client_present = client_present;
+}
+#endif
static const QXLInterface qxl_interface = {
.base.type = SPICE_INTERFACE_QXL,
@@ -327,6 +338,10 @@ static const QXLInterface qxl_interface = {
.req_cursor_notification = interface_req_cursor_notification,
.notify_update = interface_notify_update,
.flush_resources = interface_flush_resources,
+#if SPICE_SERVER_VERSION >= 0x000b04
+ .set_client_capabilities = interface_set_client_capabilities,
+ // TODO client_monitors_config
+#endif
};
void qxl_add_spice_display_interface(qxl_screen_t *qxl)