hw/display/pxa2xx_lcd: Fix 16bpp+alpha and 18bpp+alpha palette formats
The pxa2xx palette entry "16bpp plus transparency" format is xxxxxxxTRRRRR000GGGGGG00BBBBB000, and "18bpp plus transparency" is xxxxxxxTRRRRRR00GGGGGG00BBBBBB00. Correct errors in the code for reading these and converting them to the internal format. In particular, the buggy code was attempting to mask out bit 24 of a uint16_t, which Coverity spotted as an error. Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1400233901-31785-1-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
9ef137cad6
commit
fc37b7a0b0
@ -620,17 +620,6 @@ static void pxa2xx_palette_parse(PXA2xxLCDState *s, int ch, int bpp)
|
||||
src += 2;
|
||||
break;
|
||||
case 1: /* 16 bpp plus transparency */
|
||||
alpha = *(uint16_t *) src & (1 << 24);
|
||||
if (s->control[0] & LCCR0_CMS)
|
||||
r = g = b = *(uint16_t *) src & 0xff;
|
||||
else {
|
||||
r = (*(uint16_t *) src & 0xf800) >> 8;
|
||||
g = (*(uint16_t *) src & 0x07e0) >> 3;
|
||||
b = (*(uint16_t *) src & 0x001f) << 3;
|
||||
}
|
||||
src += 2;
|
||||
break;
|
||||
case 2: /* 18 bpp plus transparency */
|
||||
alpha = *(uint32_t *) src & (1 << 24);
|
||||
if (s->control[0] & LCCR0_CMS)
|
||||
r = g = b = *(uint32_t *) src & 0xff;
|
||||
@ -641,6 +630,17 @@ static void pxa2xx_palette_parse(PXA2xxLCDState *s, int ch, int bpp)
|
||||
}
|
||||
src += 4;
|
||||
break;
|
||||
case 2: /* 18 bpp plus transparency */
|
||||
alpha = *(uint32_t *) src & (1 << 24);
|
||||
if (s->control[0] & LCCR0_CMS)
|
||||
r = g = b = *(uint32_t *) src & 0xff;
|
||||
else {
|
||||
r = (*(uint32_t *) src & 0xfc0000) >> 16;
|
||||
g = (*(uint32_t *) src & 0x00fc00) >> 8;
|
||||
b = (*(uint32_t *) src & 0x0000fc);
|
||||
}
|
||||
src += 4;
|
||||
break;
|
||||
case 3: /* 24 bpp plus transparency */
|
||||
alpha = *(uint32_t *) src & (1 << 24);
|
||||
if (s->control[0] & LCCR0_CMS)
|
||||
|
Loading…
Reference in New Issue
Block a user