All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@eu.citrix.com>
To: xen-devel@lists.xensource.com
Subject: Re: [PATCH] ioemu: support shared and linesize != width * depth
Date: Wed, 5 Mar 2008 10:43:12 +0000	[thread overview]
Message-ID: <20080305104312.GA9747@implementation.uk.xensource.com> (raw)
In-Reply-To: <20080303163032.GA4923@implementation.uk.xensource.com>

Hello,

That didn't get applied, was there a problem with it?

Samuel Thibault, le Mon 03 Mar 2008 16:30:32 +0000, a écrit :
ioemu: support shared and linesize != width * depth
When sharing the buffer between e.g. xenfb and SDL, SDL must follow the
line size.

Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>

diff -r 3e970c2cae16 tools/ioemu/cocoa.m
--- a/tools/ioemu/cocoa.m	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/cocoa.m	Mon Mar 03 16:27:44 2008 +0000
@@ -96,7 +96,7 @@ static void cocoa_update(DisplayState *d
     cocoa_resize
  ------------------------------------------------------
 */
-static void cocoa_resize(DisplayState *ds, int w, int h)
+static void cocoa_resize(DisplayState *ds, int w, int h, int linesize)
 {
     const int device_bpp = 32;
     static void *screen_pixels;
diff -r 3e970c2cae16 tools/ioemu/hw/pl110.c
--- a/tools/ioemu/hw/pl110.c	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/hw/pl110.c	Mon Mar 03 16:27:44 2008 +0000
@@ -262,7 +262,7 @@ static void pl110_resize(pl110_state *s,
 {
     if (width != s->cols || height != s->rows) {
         if (pl110_enabled(s)) {
-            dpy_resize(s->ds, width, height);
+            dpy_resize(s->ds, width, height, width * 4);
         }
     }
     s->cols = width;
@@ -375,7 +375,7 @@ static void pl110_write(void *opaque, ta
         s->cr = val;
         s->bpp = (val >> 1) & 7;
         if (pl110_enabled(s)) {
-            dpy_resize(s->ds, s->cols, s->rows);
+            dpy_resize(s->ds, s->cols, s->rows, s->cols * 4);
         }
         break;
     case 10: /* LCDICR */
diff -r 3e970c2cae16 tools/ioemu/hw/tcx.c
--- a/tools/ioemu/hw/tcx.c	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/hw/tcx.c	Mon Mar 03 16:27:44 2008 +0000
@@ -342,7 +342,7 @@ void tcx_init(DisplayState *ds, uint32_t
     register_savevm("tcx", addr, 1, tcx_save, tcx_load, s);
     qemu_register_reset(tcx_reset, s);
     tcx_reset(s);
-    dpy_resize(s->ds, width, height);
+    dpy_resize(s->ds, width, height, width * 1);
 }
 
 static void tcx_screen_dump(void *opaque, const char *filename)
diff -r 3e970c2cae16 tools/ioemu/hw/vga.c
--- a/tools/ioemu/hw/vga.c	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/hw/vga.c	Mon Mar 03 16:27:44 2008 +0000
@@ -1141,7 +1141,7 @@ static void vga_draw_text(VGAState *s, i
         cw != s->last_cw || cheight != s->last_ch) {
         s->last_scr_width = width * cw;
         s->last_scr_height = height * cheight;
-        dpy_resize(s->ds, s->last_scr_width, s->last_scr_height);
+        dpy_resize(s->ds, s->last_scr_width, s->last_scr_height, s->last_scr_width * (depth / 8));
         s->last_width = width;
         s->last_height = height;
         s->last_ch = cheight;
@@ -1563,7 +1563,7 @@ static void vga_draw_graphic(VGAState *s
     }
     if (disp_width != s->last_width ||
         height != s->last_height) {
-        dpy_resize(s->ds, disp_width, height);
+        dpy_resize(s->ds, disp_width, height, disp_width * (depth / 8));
         s->last_scr_width = disp_width;
         s->last_scr_height = height;
         s->last_width = disp_width;
@@ -2229,7 +2229,7 @@ static void vga_save_dpy_update(DisplayS
 {
 }
 
-static void vga_save_dpy_resize(DisplayState *s, int w, int h)
+static void vga_save_dpy_resize(DisplayState *s, int w, int h, int linesize)
 {
     s->linesize = w * 4;
     s->data = qemu_malloc(h * s->linesize);
diff -r 3e970c2cae16 tools/ioemu/hw/xenfb.c
--- a/tools/ioemu/hw/xenfb.c	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/hw/xenfb.c	Mon Mar 03 16:27:44 2008 +0000
@@ -1183,7 +1183,7 @@ static int xenfb_register_console(struct
 			     xenfb_screen_dump,
 			     xenfb);
 	dpy_colourdepth(xenfb->ds, xenfb->depth);
-	dpy_resize(xenfb->ds, xenfb->width, xenfb->height);
+        dpy_resize(xenfb->ds, xenfb->width, xenfb->height, xenfb->row_stride);
 	if (xenfb->ds->shared_buf)
 	    dpy_setdata(xenfb->ds, xenfb->pixels);
 
@@ -1227,7 +1227,7 @@ static void xenfb_pv_update(DisplayState
     fbfront_update(fb_dev, x, y, w, h);
 }
 
-static void xenfb_pv_resize(DisplayState *s, int w, int h)
+static void xenfb_pv_resize(DisplayState *s, int w, int h, int linesize)
 {
     struct fbfront_dev *fb_dev = s->opaque;
     fprintf(stderr,"resize to %dx%d required\n", w, h);
diff -r 3e970c2cae16 tools/ioemu/sdl.c
--- a/tools/ioemu/sdl.c	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/sdl.c	Mon Mar 03 16:27:44 2008 +0000
@@ -90,7 +90,7 @@ static void sdl_setdata(DisplayState *ds
     ds->data = pixels;
 }
 
-static void sdl_resize(DisplayState *ds, int w, int h)
+static void sdl_resize(DisplayState *ds, int w, int h, int linesize)
 {
     int flags;
 
@@ -130,7 +130,7 @@ static void sdl_resize(DisplayState *ds,
         ds->data = screen->pixels;
         ds->linesize = screen->pitch;
     } else {
-        ds->linesize = (ds->depth / 8) * w;
+        ds->linesize = linesize;
     }
 }
 
@@ -342,7 +342,7 @@ static void toggle_full_screen(DisplaySt
 static void toggle_full_screen(DisplayState *ds)
 {
     gui_fullscreen = !gui_fullscreen;
-    sdl_resize(ds, screen->w, screen->h);
+    sdl_resize(ds, screen->w, screen->h, ds->linesize);
     if (gui_fullscreen) {
         gui_saved_grab = gui_grab;
         sdl_grab_start();
@@ -559,7 +559,7 @@ void sdl_display_init(DisplayState *ds, 
     ds->dpy_colourdepth = sdl_colourdepth;
     ds->dpy_setdata = sdl_setdata;
 
-    sdl_resize(ds, 640, 400);
+    sdl_resize(ds, 640, 400, 640 * 4);
     sdl_update_caption();
     SDL_EnableKeyRepeat(250, 50);
     SDL_EnableUNICODE(1);
diff -r 3e970c2cae16 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/vl.c	Mon Mar 03 16:27:44 2008 +0000
@@ -4446,7 +4446,7 @@ static void dumb_update(DisplayState *ds
 {
 }
 
-static void dumb_resize(DisplayState *ds, int w, int h)
+static void dumb_resize(DisplayState *ds, int w, int h, int linesize)
 {
 }
 
diff -r 3e970c2cae16 tools/ioemu/vl.h
--- a/tools/ioemu/vl.h	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/vl.h	Mon Mar 03 16:27:44 2008 +0000
@@ -940,7 +940,7 @@ struct DisplayState {
     int shared_buf;
     
     void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
-    void (*dpy_resize)(struct DisplayState *s, int w, int h);
+    void (*dpy_resize)(struct DisplayState *s, int w, int h, int linesize);
     void (*dpy_colourdepth)(struct DisplayState *s, int depth);
     void (*dpy_setdata)(DisplayState *s, void *pixels);
     void (*dpy_refresh)(struct DisplayState *s);
@@ -952,9 +952,9 @@ static inline void dpy_update(DisplaySta
     s->dpy_update(s, x, y, w, h);
 }
 
-static inline void dpy_resize(DisplayState *s, int w, int h)
+static inline void dpy_resize(DisplayState *s, int w, int h, int linesize)
 {
-    s->dpy_resize(s, w, h);
+    s->dpy_resize(s, w, h, linesize);
 }
 
 static inline void dpy_colourdepth(struct DisplayState *s, int depth)
diff -r 3e970c2cae16 tools/ioemu/vnc.c
--- a/tools/ioemu/vnc.c	Mon Mar 03 13:24:20 2008 +0000
+++ b/tools/ioemu/vnc.c	Mon Mar 03 16:27:44 2008 +0000
@@ -362,12 +362,15 @@ static void vnc_framebuffer_update(VncSt
     vnc_write_s32(vs, encoding);
 }
 
-static void vnc_dpy_resize(DisplayState *ds, int w, int h)
+static void vnc_dpy_resize(DisplayState *ds, int w, int h, int linesize)
 {
     static int allocated;
     int size_changed;
     VncState *vs = ds->opaque;
     int o;
+
+    if (linesize != w * vs->depth)
+        ds->shared_buf = 0;
 
     if (!ds->shared_buf) {
         if (allocated)
@@ -1728,7 +1731,7 @@ static void vnc_dpy_colourdepth(DisplayS
         }
     }
 
-    vnc_dpy_resize(ds, ds->width, ds->height);
+    vnc_dpy_resize(ds, ds->width, ds->height, ds->linesize);
 }
 
 static int protocol_client_msg(VncState *vs, uint8_t *data, size_t len)

      reply	other threads:[~2008-03-05 10:43 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-03 16:30 [PATCH] ioemu: support shared and linesize != width * depth Samuel Thibault
2008-03-05 10:43 ` Samuel Thibault [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080305104312.GA9747@implementation.uk.xensource.com \
    --to=samuel.thibault@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.