All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: sol10x86@cox.net, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] PATCH: fix bgr color mapping on qemu on Solaris/SPARC
Date: Wed, 10 May 2006 13:32:09 -0500	[thread overview]
Message-ID: <446231A9.8060809@us.ibm.com> (raw)
In-Reply-To: <9893291.1147284983406.JavaMail.root@eastrmwml06.mgt.cox.net>

Ben Taylor wrote:
> Enclosed is a patch that fixes the color mapping when running qemu on a Solaris/Sparc
> system.  To enable the color mapping bgr, call qemu with the flag "-bgr".
>
> This patch *requires* the qemu-0.8.1cvs-sparc-solaris.patch diff that was posted
> earlier today.
>
> I separated out this patch as there has been much discussion about fixing the bgr
> problem, but I haven't seen any other code posted.  This has been tested with
> Win98SE and DamnSmallLinux on an Ultra 80 running Solaris 10.
>
> Note:  VNC and Sparc are still not playing nicely, so you will see inverted colors if
> you run qemu on a Solaris Sparc host and display with vnc.
>   

This is going to almost certainly going to have a negative performance 
consequence.  A better solution would be introduce a second set of 
functions that were byte swapped and set the rgb_to_pixel function 
pointer appropriately if bgr is enabled.

I would expect that you can automate the selecting of bgr too based on 
the host architecture and the target architecture.  There shouldn't be a 
need for a new command line option.

If you added a byte_order member to the DisplayState, this would fix the 
vnc case too.

Regards,

Anthony Liguori

> Ben
> ------------------------------------------------------------------------
>
> diff -ruN qemu-solaris-sparc/hw/vga.c qemu/hw/vga.c
> --- qemu-solaris-sparc/hw/vga.c	2006-04-08 21:06:34.000000000 -0400
> +++ qemu/hw/vga.c	2006-05-10 12:31:31.059297000 -0400
> @@ -790,23 +790,43 @@
>  
>  static inline unsigned int rgb_to_pixel8(unsigned int r, unsigned int g, unsigned b)
>  {
> +if (bgr_display_enabled) {
> +    return ((b >> 5) << 5) | ((g >> 5) << 2) | (r >> 6);
> +}
> +else {
>      return ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6);
>  }
> +}
>  
>  static inline unsigned int rgb_to_pixel15(unsigned int r, unsigned int g, unsigned b)
>  {
> +if (bgr_display_enabled) {
> +    return ((b >> 3) << 10) | ((g >> 3) << 5) | (r >> 3);
> +}
> +else {
>      return ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
>  }
> +}
>  
>  static inline unsigned int rgb_to_pixel16(unsigned int r, unsigned int g, unsigned b)
>  {
> +if (bgr_display_enabled) {
> +    return ((b >> 3) << 11) | ((g >> 2) << 5) | (r >> 3);
> +}
> +else {
>      return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
>  }
> +}
>  
>  static inline unsigned int rgb_to_pixel32(unsigned int r, unsigned int g, unsigned b)
>  {
> +if (bgr_display_enabled) {
> +    return (b << 16) | (g << 8) | r;
> +}
> +else {
>      return (r << 16) | (g << 8) | b;
>  }
> +}
>  
>  #define DEPTH 8
>  #include "vga_template.h"
> @@ -1366,6 +1386,8 @@
>  
>      if (disp_width != s->last_width ||
>          height != s->last_height) {
> +        if (cirrus_vga_enabled && s->get_bpp(s) >= 8)
> +            memset(s->vram_ptr, 0xff, s->vram_size);
>          dpy_resize(s->ds, disp_width, height);
>          s->last_scr_width = disp_width;
>          s->last_scr_height = height;
> diff -ruN qemu-solaris-sparc/vl.c qemu/vl.c
> --- qemu-solaris-sparc/vl.c	2006-05-10 12:37:40.467126000 -0400
> +++ qemu/vl.c	2006-05-10 12:31:46.354278000 -0400
> @@ -130,6 +130,7 @@
>  int vm_running;
>  int rtc_utc = 1;
>  int cirrus_vga_enabled = 1;
> +int bgr_display_enabled = 0;
>  #ifdef TARGET_SPARC
>  int graphic_width = 1024;
>  int graphic_height = 768;
> @@ -4626,6 +4627,7 @@
>             "-m megs         set virtual RAM size to megs MB [default=%d]\n"
>             "-smp n          set the number of CPUs to 'n' [default=1]\n"
>             "-nographic      disable graphical output and redirect serial I/Os to console\n"
> +           "-bgr            invert colors for HOSTS using certain SPARC frame buffers\n"
>  #ifndef _WIN32
>  	   "-k language     use keyboard layout (for example \"fr\" for French)\n"
>  #endif
> @@ -4782,6 +4784,7 @@
>      QEMU_OPTION_cirrusvga,
>      QEMU_OPTION_g,
>      QEMU_OPTION_std_vga,
> +    QEMU_OPTION_bgr,
>      QEMU_OPTION_monitor,
>      QEMU_OPTION_serial,
>      QEMU_OPTION_parallel,
> @@ -4861,6 +4864,7 @@
>      { "full-screen", 0, QEMU_OPTION_full_screen },
>      { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
>      { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
> +    { "bgr", 0, QEMU_OPTION_bgr },
>      { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
>      { "smp", HAS_ARG, QEMU_OPTION_smp },
>      { "vnc", HAS_ARG, QEMU_OPTION_vnc },
> @@ -5365,6 +5369,9 @@
>              case QEMU_OPTION_std_vga:
>                  cirrus_vga_enabled = 0;
>                  break;
> +            case QEMU_OPTION_bgr:
> +                bgr_display_enabled = 1;
> +                break;
>              case QEMU_OPTION_g:
>                  {
>                      const char *p;
> diff -ruN qemu-solaris-sparc/vl.h qemu/vl.h
> --- qemu-solaris-sparc/vl.h	2006-05-03 18:02:44.000000000 -0400
> +++ qemu/vl.h	2006-05-10 12:31:51.368923000 -0400
> @@ -135,6 +135,7 @@
>  extern int bios_size;
>  extern int rtc_utc;
>  extern int cirrus_vga_enabled;
> +extern int bgr_display_enabled;
>  extern int graphic_width;
>  extern int graphic_height;
>  extern int graphic_depth;
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
>   

  reply	other threads:[~2006-05-10 21:55 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-10 18:16 [Qemu-devel] PATCH: fix bgr color mapping on qemu on Solaris/SPARC Ben Taylor
2006-05-10 18:32 ` Anthony Liguori [this message]
2006-05-10 22:07   ` Leonardo E. Reiter
2006-05-10 21:30 ` Paul Brook
2006-05-10 22:21   ` Julian Seward
2006-05-10 22:05 ` Fabrice Bellard
2006-05-11  0:33   ` Paul Brook
2006-05-11 13:04     ` Dan Sandberg
2006-05-11 14:57       ` Jan Marten Simons
2006-05-11 15:48         ` Jim C. Brown
2006-05-11 14:57       ` Oliver Gerlich
2006-05-11 17:50       ` Anthony Liguori
2006-05-11 21:39       ` Fabrice Bellard
2006-05-12  8:36         ` Dan Sandberg
2006-05-12 13:26           ` Jamie Lokier
2006-05-12 15:36             ` Dan Sandberg
2006-05-12 15:53               ` Jamie Lokier
2006-05-12 16:40                 ` Dan Sandberg
2006-05-12 16:54                   ` Paul Brook
  -- strict thread matches above, loose matches on Subject: below --
2006-05-11  0:14 Ben Taylor

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=446231A9.8060809@us.ibm.com \
    --to=aliguori@us.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sol10x86@cox.net \
    /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.