qxl and page flip

Submitted by Gerd Hoffmann on Oct. 6, 2017, 8:38 a.m.

Details

Message ID 1507279125.6131.16.camel@redhat.com
State New
Headers show
Series "qxl and page flip" ( rev: 1 ) in Spice

Not browsing as part of any series.

Commit Message

Gerd Hoffmann Oct. 6, 2017, 8:38 a.m.
Hi,

> The other option is we revert atomic modesetting from upstream qxl
> until the hw
> is upgraded to it, and we use the atomic path only on the newer
> hardware.

Well, the non-atomic "page-flip support" is blitting one framebuffer
over the other.  I wouldn't call this a solution either.  It just
happens to work ok in most cases due to lazy rendering (i.e. spice-
server not updating local surfaces unless there is a need to do that).

> I'd really like to see some commitment to fixing qxl if we do decide
> to do that.

Ok, so how about the attached virtual hardware update?

cheers,
  Gerd

Patch hide | download patch | download mbox

From 47f514ba3c2d261dc3fa76ebab37f0bb5d566252 Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Fri, 6 Oct 2017 10:17:10 +0200
Subject: [RfC PATCH] qxl: add primary surface update support

This operation allows to update the primary surface without going
through a destroy + create cycle.  It is limited to backing memory
updates (i.e. pageflip operations).  Only the spice server needs the
memory location, so this doesn't need changes in the spice protocol
and the spice client.

The guest must update QXLRam->create_surface->mem, then invoke the new
QXL_IO_UPDATE_PRIMARY_ASYNC operation via ioport write.

I'd suggest spice-server provides a new spice_qxl_update_surface_async()
function implementing this.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 spice/qxl_dev.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/spice/qxl_dev.h b/spice/qxl_dev.h
index 9e753c4073..b8fba8e233 100644
--- a/spice/qxl_dev.h
+++ b/spice/qxl_dev.h
@@ -50,6 +50,7 @@  enum {
     QXL_REVISION_STABLE_V06=0x02,
     QXL_REVISION_STABLE_V10=0x03,
     QXL_REVISION_STABLE_V12=0x04,
+    QXL_REVISION_STABLE_V14=0x05,
 };
 
 #define QXL_DEVICE_ID_DEVEL 0x01ff
@@ -97,6 +98,8 @@  enum {
     QXL_IO_FLUSH_RELEASE,
     /* appended for qxl-4 */
     QXL_IO_MONITORS_CONFIG_ASYNC,
+    /* appended for qxl-5 */
+    QXL_IO_UPDATE_PRIMARY_ASYNC,
 
     QXL_IO_RANGE_SIZE
 };
-- 
2.9.3