Attempt to fix incorrect colours on some BGR displays
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2974 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									9447084492
								
							
						
					
					
						commit
						b29169d265
					
				
							
								
								
									
										5
									
								
								cocoa.m
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								cocoa.m
									
									
									
									
									
								
							@ -164,6 +164,11 @@ static void cocoa_resize(DisplayState *ds, int w, int h)
 | 
				
			|||||||
    ds->depth = device_bpp;
 | 
					    ds->depth = device_bpp;
 | 
				
			||||||
    ds->width = w;
 | 
					    ds->width = w;
 | 
				
			||||||
    ds->height = h;
 | 
					    ds->height = h;
 | 
				
			||||||
 | 
					#ifdef __LITTLE_ENDIAN__
 | 
				
			||||||
 | 
					    ds->bgr = 1;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    ds->bgr = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    current_ds = *ds;
 | 
					    current_ds = *ds;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								hw/tcx.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								hw/tcx.c
									
									
									
									
									
								
							@ -58,13 +58,22 @@ static void update_palette_entries(TCXState *s, int start, int end)
 | 
				
			|||||||
            s->palette[i] = rgb_to_pixel8(s->r[i], s->g[i], s->b[i]);
 | 
					            s->palette[i] = rgb_to_pixel8(s->r[i], s->g[i], s->b[i]);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 15:
 | 
					        case 15:
 | 
				
			||||||
            s->palette[i] = rgb_to_pixel15(s->r[i], s->g[i], s->b[i]);
 | 
					            if (s->ds->bgr)
 | 
				
			||||||
 | 
					                s->palette[i] = rgb_to_pixel15bgr(s->r[i], s->g[i], s->b[i]);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                s->palette[i] = rgb_to_pixel15(s->r[i], s->g[i], s->b[i]);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 16:
 | 
					        case 16:
 | 
				
			||||||
            s->palette[i] = rgb_to_pixel16(s->r[i], s->g[i], s->b[i]);
 | 
					            if (s->ds->bgr)
 | 
				
			||||||
 | 
					                s->palette[i] = rgb_to_pixel16bgr(s->r[i], s->g[i], s->b[i]);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                s->palette[i] = rgb_to_pixel16(s->r[i], s->g[i], s->b[i]);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case 32:
 | 
					        case 32:
 | 
				
			||||||
            s->palette[i] = rgb_to_pixel32(s->r[i], s->g[i], s->b[i]);
 | 
					            if (s->ds->bgr)
 | 
				
			||||||
 | 
					                s->palette[i] = rgb_to_pixel32bgr(s->r[i], s->g[i], s->b[i]);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                s->palette[i] = rgb_to_pixel32(s->r[i], s->g[i], s->b[i]);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										58
									
								
								hw/vga.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								hw/vga.c
									
									
									
									
									
								
							@ -846,6 +846,15 @@ static unsigned int rgb_to_pixel15_dup(unsigned int r, unsigned int g, unsigned
 | 
				
			|||||||
    return col;
 | 
					    return col;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static unsigned int rgb_to_pixel15bgr_dup(unsigned int r, unsigned int g,
 | 
				
			||||||
 | 
					                                          unsigned int b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    unsigned int col;
 | 
				
			||||||
 | 
					    col = rgb_to_pixel15bgr(r, g, b);
 | 
				
			||||||
 | 
					    col |= col << 16;
 | 
				
			||||||
 | 
					    return col;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned int rgb_to_pixel16_dup(unsigned int r, unsigned int g, unsigned b)
 | 
					static unsigned int rgb_to_pixel16_dup(unsigned int r, unsigned int g, unsigned b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    unsigned int col;
 | 
					    unsigned int col;
 | 
				
			||||||
@ -854,6 +863,15 @@ static unsigned int rgb_to_pixel16_dup(unsigned int r, unsigned int g, unsigned
 | 
				
			|||||||
    return col;
 | 
					    return col;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static unsigned int rgb_to_pixel16bgr_dup(unsigned int r, unsigned int g,
 | 
				
			||||||
 | 
					                                          unsigned int b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    unsigned int col;
 | 
				
			||||||
 | 
					    col = rgb_to_pixel16bgr(r, g, b);
 | 
				
			||||||
 | 
					    col |= col << 16;
 | 
				
			||||||
 | 
					    return col;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned int rgb_to_pixel32_dup(unsigned int r, unsigned int g, unsigned b)
 | 
					static unsigned int rgb_to_pixel32_dup(unsigned int r, unsigned int g, unsigned b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    unsigned int col;
 | 
					    unsigned int col;
 | 
				
			||||||
@ -974,7 +992,7 @@ static int update_basic_params(VGAState *s)
 | 
				
			|||||||
    return full_update;
 | 
					    return full_update;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NB_DEPTHS 5
 | 
					#define NB_DEPTHS 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline int get_depth_index(DisplayState *s)
 | 
					static inline int get_depth_index(DisplayState *s)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -983,9 +1001,15 @@ static inline int get_depth_index(DisplayState *s)
 | 
				
			|||||||
    case 8:
 | 
					    case 8:
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    case 15:
 | 
					    case 15:
 | 
				
			||||||
        return 1;
 | 
					        if (s->bgr)
 | 
				
			||||||
 | 
					            return 5;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            return 1;
 | 
				
			||||||
    case 16:
 | 
					    case 16:
 | 
				
			||||||
        return 2;
 | 
					        if (s->bgr)
 | 
				
			||||||
 | 
					            return 6;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            return 2;
 | 
				
			||||||
    case 32:
 | 
					    case 32:
 | 
				
			||||||
        if (s->bgr)
 | 
					        if (s->bgr)
 | 
				
			||||||
            return 4;
 | 
					            return 4;
 | 
				
			||||||
@ -1000,6 +1024,8 @@ static vga_draw_glyph8_func *vga_draw_glyph8_table[NB_DEPTHS] = {
 | 
				
			|||||||
    vga_draw_glyph8_16,
 | 
					    vga_draw_glyph8_16,
 | 
				
			||||||
    vga_draw_glyph8_32,
 | 
					    vga_draw_glyph8_32,
 | 
				
			||||||
    vga_draw_glyph8_32,
 | 
					    vga_draw_glyph8_32,
 | 
				
			||||||
 | 
					    vga_draw_glyph8_16,
 | 
				
			||||||
 | 
					    vga_draw_glyph8_16,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static vga_draw_glyph8_func *vga_draw_glyph16_table[NB_DEPTHS] = {
 | 
					static vga_draw_glyph8_func *vga_draw_glyph16_table[NB_DEPTHS] = {
 | 
				
			||||||
@ -1008,6 +1034,8 @@ static vga_draw_glyph8_func *vga_draw_glyph16_table[NB_DEPTHS] = {
 | 
				
			|||||||
    vga_draw_glyph16_16,
 | 
					    vga_draw_glyph16_16,
 | 
				
			||||||
    vga_draw_glyph16_32,
 | 
					    vga_draw_glyph16_32,
 | 
				
			||||||
    vga_draw_glyph16_32,
 | 
					    vga_draw_glyph16_32,
 | 
				
			||||||
 | 
					    vga_draw_glyph16_16,
 | 
				
			||||||
 | 
					    vga_draw_glyph16_16,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static vga_draw_glyph9_func *vga_draw_glyph9_table[NB_DEPTHS] = {
 | 
					static vga_draw_glyph9_func *vga_draw_glyph9_table[NB_DEPTHS] = {
 | 
				
			||||||
@ -1016,6 +1044,8 @@ static vga_draw_glyph9_func *vga_draw_glyph9_table[NB_DEPTHS] = {
 | 
				
			|||||||
    vga_draw_glyph9_16,
 | 
					    vga_draw_glyph9_16,
 | 
				
			||||||
    vga_draw_glyph9_32,
 | 
					    vga_draw_glyph9_32,
 | 
				
			||||||
    vga_draw_glyph9_32,
 | 
					    vga_draw_glyph9_32,
 | 
				
			||||||
 | 
					    vga_draw_glyph9_16,
 | 
				
			||||||
 | 
					    vga_draw_glyph9_16,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
static const uint8_t cursor_glyph[32 * 4] = {
 | 
					static const uint8_t cursor_glyph[32 * 4] = {
 | 
				
			||||||
@ -1236,60 +1266,80 @@ static vga_draw_line_func *vga_draw_line_table[NB_DEPTHS * VGA_DRAW_LINE_NB] = {
 | 
				
			|||||||
    vga_draw_line2_16,
 | 
					    vga_draw_line2_16,
 | 
				
			||||||
    vga_draw_line2_32,
 | 
					    vga_draw_line2_32,
 | 
				
			||||||
    vga_draw_line2_32,
 | 
					    vga_draw_line2_32,
 | 
				
			||||||
 | 
					    vga_draw_line2_16,
 | 
				
			||||||
 | 
					    vga_draw_line2_16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line2d2_8,
 | 
					    vga_draw_line2d2_8,
 | 
				
			||||||
    vga_draw_line2d2_16,
 | 
					    vga_draw_line2d2_16,
 | 
				
			||||||
    vga_draw_line2d2_16,
 | 
					    vga_draw_line2d2_16,
 | 
				
			||||||
    vga_draw_line2d2_32,
 | 
					    vga_draw_line2d2_32,
 | 
				
			||||||
    vga_draw_line2d2_32,
 | 
					    vga_draw_line2d2_32,
 | 
				
			||||||
 | 
					    vga_draw_line2d2_16,
 | 
				
			||||||
 | 
					    vga_draw_line2d2_16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line4_8,
 | 
					    vga_draw_line4_8,
 | 
				
			||||||
    vga_draw_line4_16,
 | 
					    vga_draw_line4_16,
 | 
				
			||||||
    vga_draw_line4_16,
 | 
					    vga_draw_line4_16,
 | 
				
			||||||
    vga_draw_line4_32,
 | 
					    vga_draw_line4_32,
 | 
				
			||||||
    vga_draw_line4_32,
 | 
					    vga_draw_line4_32,
 | 
				
			||||||
 | 
					    vga_draw_line4_16,
 | 
				
			||||||
 | 
					    vga_draw_line4_16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line4d2_8,
 | 
					    vga_draw_line4d2_8,
 | 
				
			||||||
    vga_draw_line4d2_16,
 | 
					    vga_draw_line4d2_16,
 | 
				
			||||||
    vga_draw_line4d2_16,
 | 
					    vga_draw_line4d2_16,
 | 
				
			||||||
    vga_draw_line4d2_32,
 | 
					    vga_draw_line4d2_32,
 | 
				
			||||||
    vga_draw_line4d2_32,
 | 
					    vga_draw_line4d2_32,
 | 
				
			||||||
 | 
					    vga_draw_line4d2_16,
 | 
				
			||||||
 | 
					    vga_draw_line4d2_16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line8d2_8,
 | 
					    vga_draw_line8d2_8,
 | 
				
			||||||
    vga_draw_line8d2_16,
 | 
					    vga_draw_line8d2_16,
 | 
				
			||||||
    vga_draw_line8d2_16,
 | 
					    vga_draw_line8d2_16,
 | 
				
			||||||
    vga_draw_line8d2_32,
 | 
					    vga_draw_line8d2_32,
 | 
				
			||||||
    vga_draw_line8d2_32,
 | 
					    vga_draw_line8d2_32,
 | 
				
			||||||
 | 
					    vga_draw_line8d2_16,
 | 
				
			||||||
 | 
					    vga_draw_line8d2_16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line8_8,
 | 
					    vga_draw_line8_8,
 | 
				
			||||||
    vga_draw_line8_16,
 | 
					    vga_draw_line8_16,
 | 
				
			||||||
    vga_draw_line8_16,
 | 
					    vga_draw_line8_16,
 | 
				
			||||||
    vga_draw_line8_32,
 | 
					    vga_draw_line8_32,
 | 
				
			||||||
    vga_draw_line8_32,
 | 
					    vga_draw_line8_32,
 | 
				
			||||||
 | 
					    vga_draw_line8_16,
 | 
				
			||||||
 | 
					    vga_draw_line8_16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line15_8,
 | 
					    vga_draw_line15_8,
 | 
				
			||||||
    vga_draw_line15_15,
 | 
					    vga_draw_line15_15,
 | 
				
			||||||
    vga_draw_line15_16,
 | 
					    vga_draw_line15_16,
 | 
				
			||||||
    vga_draw_line15_32,
 | 
					    vga_draw_line15_32,
 | 
				
			||||||
    vga_draw_line15_32bgr,
 | 
					    vga_draw_line15_32bgr,
 | 
				
			||||||
 | 
					    vga_draw_line15_15bgr,
 | 
				
			||||||
 | 
					    vga_draw_line15_16bgr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line16_8,
 | 
					    vga_draw_line16_8,
 | 
				
			||||||
    vga_draw_line16_15,
 | 
					    vga_draw_line16_15,
 | 
				
			||||||
    vga_draw_line16_16,
 | 
					    vga_draw_line16_16,
 | 
				
			||||||
    vga_draw_line16_32,
 | 
					    vga_draw_line16_32,
 | 
				
			||||||
    vga_draw_line16_32bgr,
 | 
					    vga_draw_line16_32bgr,
 | 
				
			||||||
 | 
					    vga_draw_line16_15bgr,
 | 
				
			||||||
 | 
					    vga_draw_line16_16bgr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line24_8,
 | 
					    vga_draw_line24_8,
 | 
				
			||||||
    vga_draw_line24_15,
 | 
					    vga_draw_line24_15,
 | 
				
			||||||
    vga_draw_line24_16,
 | 
					    vga_draw_line24_16,
 | 
				
			||||||
    vga_draw_line24_32,
 | 
					    vga_draw_line24_32,
 | 
				
			||||||
    vga_draw_line24_32bgr,
 | 
					    vga_draw_line24_32bgr,
 | 
				
			||||||
 | 
					    vga_draw_line24_15bgr,
 | 
				
			||||||
 | 
					    vga_draw_line24_16bgr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_draw_line32_8,
 | 
					    vga_draw_line32_8,
 | 
				
			||||||
    vga_draw_line32_15,
 | 
					    vga_draw_line32_15,
 | 
				
			||||||
    vga_draw_line32_16,
 | 
					    vga_draw_line32_16,
 | 
				
			||||||
    vga_draw_line32_32,
 | 
					    vga_draw_line32_32,
 | 
				
			||||||
    vga_draw_line32_32bgr,
 | 
					    vga_draw_line32_32bgr,
 | 
				
			||||||
 | 
					    vga_draw_line32_15bgr,
 | 
				
			||||||
 | 
					    vga_draw_line32_16bgr,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef unsigned int rgb_to_pixel_dup_func(unsigned int r, unsigned int g, unsigned b);
 | 
					typedef unsigned int rgb_to_pixel_dup_func(unsigned int r, unsigned int g, unsigned b);
 | 
				
			||||||
@ -1300,6 +1350,8 @@ static rgb_to_pixel_dup_func *rgb_to_pixel_dup_table[NB_DEPTHS] = {
 | 
				
			|||||||
    rgb_to_pixel16_dup,
 | 
					    rgb_to_pixel16_dup,
 | 
				
			||||||
    rgb_to_pixel32_dup,
 | 
					    rgb_to_pixel32_dup,
 | 
				
			||||||
    rgb_to_pixel32bgr_dup,
 | 
					    rgb_to_pixel32bgr_dup,
 | 
				
			||||||
 | 
					    rgb_to_pixel15bgr_dup,
 | 
				
			||||||
 | 
					    rgb_to_pixel16bgr_dup,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int vga_get_bpp(VGAState *s)
 | 
					static int vga_get_bpp(VGAState *s)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								sdl.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sdl.c
									
									
									
									
									
								
							@ -87,7 +87,7 @@ static void sdl_resize(DisplayState *ds, int w, int h)
 | 
				
			|||||||
    ds->data = screen->pixels;
 | 
					    ds->data = screen->pixels;
 | 
				
			||||||
    ds->linesize = screen->pitch;
 | 
					    ds->linesize = screen->pitch;
 | 
				
			||||||
    ds->depth = screen->format->BitsPerPixel;
 | 
					    ds->depth = screen->format->BitsPerPixel;
 | 
				
			||||||
    if (ds->depth == 32 && screen->format->Rshift == 0) {
 | 
					    if (screen->format->Bshift > screen->format->Rshift) {
 | 
				
			||||||
        ds->bgr = 1;
 | 
					        ds->bgr = 1;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        ds->bgr = 0;
 | 
					        ds->bgr = 0;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user