diff options
author | Alon Levy <alevy@redhat.com> | 2012-02-24 23:19:31 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2012-02-27 09:46:52 +0100 |
commit | 81fb6f1504fb9ef71f2382f44af34756668296e8 (patch) | |
tree | 7f34b563bd1687605bc12f5c75717614f6f9c2d6 /ui | |
parent | 2e1a98c9c1b90ca093278c6b43244dc46604d7b7 (diff) | |
download | qemu-81fb6f1504fb9ef71f2382f44af34756668296e8.zip qemu-81fb6f1504fb9ef71f2382f44af34756668296e8.tar.gz qemu-81fb6f1504fb9ef71f2382f44af34756668296e8.tar.bz2 |
qxl: make qxl_render_update async
RHBZ# 747011
Removes the last user of QXL_SYNC when using update drivers that use the
_ASYNC io ports.
The last user is qxl_render_update, it is called both by qxl_hw_update
which is the vga_hw_update_ptr passed to graphic_console_init, and by
qxl_hw_screen_dump.
At the same time the QXLRect area being passed to the red_worker thread
is passed as a copy, as part of the QXLCookie.
The implementation uses interface_update_area_complete with a bh to make
sure dpy_update and qxl_flip are called from the io thread, otherwise
the vga->ds->surface.data can change under our feet.
With this patch sdl+spice works fine. But spice by itself doesn't
produce the expected screendumps unless repeated a few times, due to
ppm_save being called before update_area (rendering done in spice server
thread) having a chance to complete. Fixed by next patch, but see commit
message for problem introduced by it.
Signed-off-by: Alon Levy <alevy@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/spice-display.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/ui/spice-display.h b/ui/spice-display.h index 8a010cb..12e50b6 100644 --- a/ui/spice-display.h +++ b/ui/spice-display.h @@ -50,6 +50,7 @@ typedef enum qxl_async_io { enum { QXL_COOKIE_TYPE_IO, + QXL_COOKIE_TYPE_RENDER_UPDATE_AREA, }; typedef struct QXLCookie { @@ -57,6 +58,11 @@ typedef struct QXLCookie { uint64_t io; union { uint32_t surface_id; + QXLRect area; + struct { + QXLRect area; + int redraw; + } render; } u; } QXLCookie; |