Fix 24 bit mode
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4937 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
749ecd9953
commit
688ea2eb9b
23
hw/tcx.c
23
hw/tcx.c
@ -124,19 +124,34 @@ static void tcx_draw_line8(TCXState *s1, uint8_t *d,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
XXX Could be much more optimal:
|
||||||
|
* detect if line/page/whole screen is in 24 bit mode
|
||||||
|
* if destination is also BGR, use memcpy
|
||||||
|
*/
|
||||||
static inline void tcx24_draw_line32(TCXState *s1, uint8_t *d,
|
static inline void tcx24_draw_line32(TCXState *s1, uint8_t *d,
|
||||||
const uint8_t *s, int width,
|
const uint8_t *s, int width,
|
||||||
const uint32_t *cplane,
|
const uint32_t *cplane,
|
||||||
const uint32_t *s24)
|
const uint32_t *s24)
|
||||||
{
|
{
|
||||||
int x;
|
int x, bgr, r, g, b;
|
||||||
uint8_t val;
|
uint8_t val, *p8;
|
||||||
uint32_t *p = (uint32_t *)d;
|
uint32_t *p = (uint32_t *)d;
|
||||||
uint32_t dval;
|
uint32_t dval;
|
||||||
|
|
||||||
|
bgr = s1->ds->bgr;
|
||||||
for(x = 0; x < width; x++, s++, s24++) {
|
for(x = 0; x < width; x++, s++, s24++) {
|
||||||
if ((bswap32(*cplane++) & 0xff000000) == 0x03000000) { // 24-bit direct
|
if ((be32_to_cpu(*cplane++) & 0xff000000) == 0x03000000) {
|
||||||
dval = bswap32(*s24) & 0x00ffffff;
|
// 24-bit direct, BGR order
|
||||||
|
p8 = (uint8_t *)s24;
|
||||||
|
p8++;
|
||||||
|
b = *p8++;
|
||||||
|
g = *p8++;
|
||||||
|
r = *p8++;
|
||||||
|
if (bgr)
|
||||||
|
dval = rgb_to_pixel32bgr(r, g, b);
|
||||||
|
else
|
||||||
|
dval = rgb_to_pixel32(r, g, b);
|
||||||
} else {
|
} else {
|
||||||
val = *s;
|
val = *s;
|
||||||
dval = s1->palette[val];
|
dval = s1->palette[val];
|
||||||
|
Loading…
Reference in New Issue
Block a user