[Qemu-devel] [PATCH] sm501: Fix hardware cursor color conversion

Sebastian Bauer posted 1 patch 5 years, 9 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20180618213816.5966-1-mail@sebastianbauer.info
Test checkpatch passed
Test docker-mingw@fedora passed
Test docker-quick@centos7 passed
Test s390x failed
hw/display/sm501.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
[Qemu-devel] [PATCH] sm501: Fix hardware cursor color conversion
Posted by Sebastian Bauer 5 years, 9 months ago
According to the sm501 specs the hardware cursor colors are to be given in
the rgb565 format, but the code currently interprets them as bgr565.

Therefore, the colors of the hardware cursors are wrong in the QEMU
display, e.g., the standard mouse pointer of AmigaOS appears blue instead
of red. This change fixes this issue by replacing the existing naive
bgr565 => rgb888 conversion with a standard rgb565 => rgb888 one that also
scales the color component values properly.

Signed-off-by: Sebastian Bauer <mail@sebastianbauer.info>
---
 hw/display/sm501.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index 0488ab69d3..6c7f8483f3 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -668,9 +668,9 @@ static inline void get_hwc_palette(SM501State *state, int crt, uint8_t *palette)
         } else {
             rgb565 = color_reg & 0xFFFF;
         }
-        palette[i * 3 + 0] = (rgb565 << 3) & 0xf8; /* red */
-        palette[i * 3 + 1] = (rgb565 >> 3) & 0xfc; /* green */
-        palette[i * 3 + 2] = (rgb565 >> 8) & 0xf8; /* blue */
+        palette[i * 3 + 0] = ((rgb565 >> 11) * 527 + 23) >> 6; /* r */
+        palette[i * 3 + 1] = (((rgb565 >> 5) & 0x3f) * 259 + 33) >> 6; /* g */
+        palette[i * 3 + 2] = ((rgb565 & 0x1f) * 527 + 23) >> 6; /* b */
     }
 }
 
-- 
2.17.1


Re: [Qemu-devel] [PATCH] sm501: Fix hardware cursor color conversion
Posted by David Gibson 5 years, 9 months ago
On Mon, Jun 18, 2018 at 11:38:16PM +0200, Sebastian Bauer wrote:
> According to the sm501 specs the hardware cursor colors are to be given in
> the rgb565 format, but the code currently interprets them as bgr565.

Can those specs be found online somewhere?

> 
> Therefore, the colors of the hardware cursors are wrong in the QEMU
> display, e.g., the standard mouse pointer of AmigaOS appears blue instead
> of red. This change fixes this issue by replacing the existing naive
> bgr565 => rgb888 conversion with a standard rgb565 => rgb888 one that also
> scales the color component values properly.
> 
> Signed-off-by: Sebastian Bauer <mail@sebastianbauer.info>
> ---
>  hw/display/sm501.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/display/sm501.c b/hw/display/sm501.c
> index 0488ab69d3..6c7f8483f3 100644
> --- a/hw/display/sm501.c
> +++ b/hw/display/sm501.c
> @@ -668,9 +668,9 @@ static inline void get_hwc_palette(SM501State *state, int crt, uint8_t *palette)
>          } else {
>              rgb565 = color_reg & 0xFFFF;
>          }
> -        palette[i * 3 + 0] = (rgb565 << 3) & 0xf8; /* red */
> -        palette[i * 3 + 1] = (rgb565 >> 3) & 0xfc; /* green */
> -        palette[i * 3 + 2] = (rgb565 >> 8) & 0xf8; /* blue */
> +        palette[i * 3 + 0] = ((rgb565 >> 11) * 527 + 23) >> 6; /* r */
> +        palette[i * 3 + 1] = (((rgb565 >> 5) & 0x3f) * 259 + 33) >> 6; /* g */
> +        palette[i * 3 + 2] = ((rgb565 & 0x1f) * 527 + 23) >> 6; /* b */
>      }
>  }
>  

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson
Re: [Qemu-devel] [PATCH] sm501: Fix hardware cursor color conversion
Posted by David Gibson 5 years, 9 months ago
On Mon, Jun 18, 2018 at 11:38:16PM +0200, Sebastian Bauer wrote:
> According to the sm501 specs the hardware cursor colors are to be given in
> the rgb565 format, but the code currently interprets them as bgr565.
> 
> Therefore, the colors of the hardware cursors are wrong in the QEMU
> display, e.g., the standard mouse pointer of AmigaOS appears blue instead
> of red. This change fixes this issue by replacing the existing naive
> bgr565 => rgb888 conversion with a standard rgb565 => rgb888 one that also
> scales the color component values properly.
> 
> Signed-off-by: Sebastian Bauer <mail@sebastianbauer.info>

Applied to ppc-for-3.0, thanks.

> ---
>  hw/display/sm501.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/display/sm501.c b/hw/display/sm501.c
> index 0488ab69d3..6c7f8483f3 100644
> --- a/hw/display/sm501.c
> +++ b/hw/display/sm501.c
> @@ -668,9 +668,9 @@ static inline void get_hwc_palette(SM501State *state, int crt, uint8_t *palette)
>          } else {
>              rgb565 = color_reg & 0xFFFF;
>          }
> -        palette[i * 3 + 0] = (rgb565 << 3) & 0xf8; /* red */
> -        palette[i * 3 + 1] = (rgb565 >> 3) & 0xfc; /* green */
> -        palette[i * 3 + 2] = (rgb565 >> 8) & 0xf8; /* blue */
> +        palette[i * 3 + 0] = ((rgb565 >> 11) * 527 + 23) >> 6; /* r */
> +        palette[i * 3 + 1] = (((rgb565 >> 5) & 0x3f) * 259 + 33) >> 6; /* g */
> +        palette[i * 3 + 2] = ((rgb565 & 0x1f) * 527 + 23) >> 6; /* b */
>      }
>  }
>  

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson