diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2015-01-19 13:37:05 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-01-19 13:37:05 +0000 |
commit | 74acb99737dbedd86654d660c0c20815139a873c (patch) | |
tree | fc448d083e2ae57d7d3b7d8e361a2b052fabd2f3 /hw | |
parent | 1e42c353469cb58ca4f3b450eea4211af7d0b147 (diff) | |
parent | 877417d9ae6846bea4744b198131a5fe5117d7a5 (diff) |
Merge remote-tracking branch 'remotes/kraxel/tags/pull-console-20150119-1' into staging
ui: add shared surface format negotiation.
# gpg: Signature made Mon 19 Jan 2015 12:47:36 GMT using RSA key ID D3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>"
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
* remotes/kraxel/tags/pull-console-20150119-1:
ui/sdl2: Support shared surface for more pixman formats
ui/sdl: Support shared surface for more pixman formats
ui/gtk: Support shared surface for most pixman formats
ui/spice: Support shared surface for most pixman formats
ui/vnc: Support shared surface for most pixman formats
ui/pixman: add qemu_pixman_check_format
ui: Add dpy_gfx_check_format() to check backend shared surface support
ui: Make qemu_default_pixman_format() return 0 on unsupported formats
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/display/vga.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/hw/display/vga.c b/hw/display/vga.c index a620c07864..ffcfce38a4 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -1437,6 +1437,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) uint32_t v, addr1, addr; vga_draw_line_func *vga_draw_line = NULL; bool share_surface; + pixman_format_code_t format; #ifdef HOST_WORDS_BIGENDIAN bool byteswap = !s->big_endian_fb; #else @@ -1481,8 +1482,19 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) depth = s->get_bpp(s); - share_surface = (!s->force_shadow) && - ( depth == 32 || (depth == 16 && !byteswap) ); + /* + * Check whether we can share the surface with the backend + * or whether we need a shadow surface. We share native + * endian surfaces for 15bpp and above and byteswapped + * surfaces for 24bpp and above. + */ + format = qemu_default_pixman_format(depth, !byteswap); + if (format) { + share_surface = dpy_gfx_check_format(s->con, format) + && !s->force_shadow; + } else { + share_surface = false; + } if (s->line_offset != s->last_line_offset || disp_width != s->last_width || height != s->last_height || @@ -1490,8 +1502,6 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) s->last_byteswap != byteswap || share_surface != is_buffer_shared(surface)) { if (share_surface) { - pixman_format_code_t format = - qemu_default_pixman_format(depth, !byteswap); surface = qemu_create_displaysurface_from(disp_width, height, format, s->line_offset, s->vram_ptr + (s->start_addr * 4)); |