be419c191b
Fix crash on 24bpp host server (#518960)
79 lines
2.9 KiB
Diff
79 lines
2.9 KiB
Diff
From bd58ebe4cf3b0ce60f87fb26a3715f774dabd349 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Martin <consume.noise@gmail.com>
|
|
Date: Thu, 20 Dec 2012 13:50:17 +0100
|
|
Subject: [PATCH] ephyr: Fix crash on 24bpp host framebuffer
|
|
|
|
Use bytes_per_line and bits_per_pixel from the created XImage to fix
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=518960
|
|
|
|
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
|
|
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
---
|
|
hw/kdrive/ephyr/ephyr.c | 6 ++----
|
|
hw/kdrive/ephyr/hostx.c | 6 +++++-
|
|
hw/kdrive/ephyr/hostx.h | 3 ++-
|
|
3 files changed, 9 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
|
|
index f32e432..02d4970 100644
|
|
--- a/hw/kdrive/ephyr/ephyr.c
|
|
+++ b/hw/kdrive/ephyr/ephyr.c
|
|
@@ -238,13 +238,11 @@ ephyrMapFramebuffer(KdScreenInfo * screen)
|
|
KdComputePointerMatrix(&m, ephyrRandr, screen->width, screen->height);
|
|
KdSetPointerMatrix(&m);
|
|
|
|
- priv->bytes_per_line =
|
|
- ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2;
|
|
-
|
|
buffer_height = ephyrBufferHeight(screen);
|
|
|
|
priv->base =
|
|
- hostx_screen_init(screen, screen->width, screen->height, buffer_height);
|
|
+ hostx_screen_init(screen, screen->width, screen->height, buffer_height,
|
|
+ &priv->bytes_per_line, &screen->fb.bitsPerPixel);
|
|
|
|
if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) {
|
|
scrpriv->shadow = FALSE;
|
|
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
|
|
index c8642cb..f2b458d 100644
|
|
--- a/hw/kdrive/ephyr/hostx.c
|
|
+++ b/hw/kdrive/ephyr/hostx.c
|
|
@@ -619,7 +619,8 @@ hostx_set_cmap_entry(unsigned char idx,
|
|
*/
|
|
void *
|
|
hostx_screen_init(EphyrScreenInfo screen,
|
|
- int width, int height, int buffer_height)
|
|
+ int width, int height, int buffer_height,
|
|
+ int *bytes_per_line, int *bits_per_pixel)
|
|
{
|
|
int bitmap_pad;
|
|
Bool shm_success = False;
|
|
@@ -696,6 +697,9 @@ hostx_screen_init(EphyrScreenInfo screen,
|
|
malloc(host_screen->ximg->bytes_per_line * buffer_height);
|
|
}
|
|
|
|
+ *bytes_per_line = host_screen->ximg->bytes_per_line;
|
|
+ *bits_per_pixel = host_screen->ximg->bits_per_pixel;
|
|
+
|
|
XResizeWindow(HostX.dpy, host_screen->win, width, height);
|
|
|
|
/* Ask the WM to keep our size static */
|
|
diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h
|
|
index 31c4053..38b7b37 100644
|
|
--- a/hw/kdrive/ephyr/hostx.h
|
|
+++ b/hw/kdrive/ephyr/hostx.h
|
|
@@ -193,7 +193,8 @@ hostx_set_cmap_entry(unsigned char idx,
|
|
unsigned char r, unsigned char g, unsigned char b);
|
|
|
|
void *hostx_screen_init(EphyrScreenInfo screen,
|
|
- int width, int height, int buffer_height);
|
|
+ int width, int height, int buffer_height,
|
|
+ int *bytes_per_line, int *bits_per_pixel);
|
|
|
|
void
|
|
|
|
--
|
|
1.8.1.4
|
|
|