qemu: Add patches to add RGB support and fix some mouse problems

git-svn-id: https://svn.o-hand.com/repos/poky/trunk@416 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
Richard Purdie 2006-05-25 08:03:03 +00:00
parent 7defc582e0
commit f326127cf7
3 changed files with 248 additions and 1 deletions

View File

@ -0,0 +1,25 @@
If the cursor is hidden (SDL_ShowCursor(0)) and the input is grabbed
(SDL_WM_GrabInput(SDL_GRAB_ON)), then the mouse will give relative motion
events even when the cursor reaches the edge fo the screen. This is currently
only implemented on Windows and Linux/Unix-a-likes.
Index: qemu/sdl.c
===================================================================
--- qemu.orig/sdl.c 2006-04-13 12:22:22.000000000 +0100
+++ qemu/sdl.c 2006-05-25 00:28:25.000000000 +0100
@@ -280,13 +280,13 @@
static void sdl_hide_cursor(void)
{
- SDL_SetCursor(sdl_cursor_hidden);
+ SDL_ShowCursor(0);
}
static void sdl_show_cursor(void)
{
if (!kbd_mouse_is_absolute()) {
- SDL_SetCursor(sdl_cursor_normal);
+ SDL_ShowCursor(1);
}
}

View File

@ -0,0 +1,219 @@
Index: qemu/hw/pl110.c
===================================================================
--- qemu.orig/hw/pl110.c 2006-04-11 21:49:46.000000000 +0100
+++ qemu/hw/pl110.c 2006-05-24 22:53:00.000000000 +0100
@@ -10,6 +10,7 @@
#include "vl.h"
#define PL110_CR_EN 0x001
+#define PL110_CR_BGR 0x100
#define PL110_CR_BEBO 0x200
#define PL110_CR_BEPO 0x400
#define PL110_CR_PWR 0x800
@@ -115,6 +116,7 @@
int first, last = 0;
int dirty, new_dirty;
int i;
+ int bpp_offset;
if (!pl110_enabled(s))
return;
@@ -146,12 +148,17 @@
fprintf(stderr, "pl110: Bad color depth\n");
exit(1);
}
+ if (s->cr & PL110_CR_BGR)
+ bpp_offset = 0;
+ else
+ bpp_offset = 18;
+
if (s->cr & PL110_CR_BEBO)
- fn = fntable[s->bpp + 6];
+ fn = fntable[s->bpp + 6 + bpp_offset];
else if (s->cr & PL110_CR_BEPO)
- fn = fntable[s->bpp + 12];
+ fn = fntable[s->bpp + 12 + bpp_offset];
else
- fn = fntable[s->bpp];
+ fn = fntable[s->bpp + bpp_offset];
src_width = s->cols;
switch (s->bpp) {
Index: qemu/hw/pl110_template.h
===================================================================
--- qemu.orig/hw/pl110_template.h 2006-02-19 12:31:32.000000000 +0000
+++ qemu/hw/pl110_template.h 2006-05-24 23:04:03.000000000 +0100
@@ -24,6 +24,16 @@
#error unknown bit depth
#endif
+#undef RGB
+#define BORDER bgr
+#define ORDER 0
+#include "pl110_template.h"
+#define ORDER 1
+#include "pl110_template.h"
+#define ORDER 2
+#include "pl110_template.h"
+#define RGB
+#define BORDER rgb
#define ORDER 0
#include "pl110_template.h"
#define ORDER 1
@@ -33,26 +43,47 @@
static drawfn glue(pl110_draw_fn_,BITS)[18] =
{
- glue(pl110_draw_line1_lblp,BITS),
- glue(pl110_draw_line2_lblp,BITS),
- glue(pl110_draw_line4_lblp,BITS),
- glue(pl110_draw_line8_lblp,BITS),
- glue(pl110_draw_line16_lblp,BITS),
- glue(pl110_draw_line32_lblp,BITS),
-
- glue(pl110_draw_line1_bbbp,BITS),
- glue(pl110_draw_line2_bbbp,BITS),
- glue(pl110_draw_line4_bbbp,BITS),
- glue(pl110_draw_line8_bbbp,BITS),
- glue(pl110_draw_line16_bbbp,BITS),
- glue(pl110_draw_line32_bbbp,BITS),
-
- glue(pl110_draw_line1_lbbp,BITS),
- glue(pl110_draw_line2_lbbp,BITS),
- glue(pl110_draw_line4_lbbp,BITS),
- glue(pl110_draw_line8_lbbp,BITS),
- glue(pl110_draw_line16_lbbp,BITS),
- glue(pl110_draw_line32_lbbp,BITS)
+ glue(pl110_draw_line1_lblp_bgr,BITS),
+ glue(pl110_draw_line2_lblp_bgr,BITS),
+ glue(pl110_draw_line4_lblp_bgr,BITS),
+ glue(pl110_draw_line8_lblp_bgr,BITS),
+ glue(pl110_draw_line16_lblp_bgr,BITS),
+ glue(pl110_draw_line32_lblp_bgr,BITS),
+
+ glue(pl110_draw_line1_bbbp_bgr,BITS),
+ glue(pl110_draw_line2_bbbp_bgr,BITS),
+ glue(pl110_draw_line4_bbbp_bgr,BITS),
+ glue(pl110_draw_line8_bbbp_bgr,BITS),
+ glue(pl110_draw_line16_bbbp_bgr,BITS),
+ glue(pl110_draw_line32_bbbp_bgr,BITS),
+
+ glue(pl110_draw_line1_lbbp_bgr,BITS),
+ glue(pl110_draw_line2_lbbp_bgr,BITS),
+ glue(pl110_draw_line4_lbbp_bgr,BITS),
+ glue(pl110_draw_line8_lbbp_bgr,BITS),
+ glue(pl110_draw_line16_lbbp_bgr,BITS),
+ glue(pl110_draw_line32_lbbp_bgr,BITS),
+
+ glue(pl110_draw_line1_lblp_rgb,BITS),
+ glue(pl110_draw_line2_lblp_rgb,BITS),
+ glue(pl110_draw_line4_lblp_rgb,BITS),
+ glue(pl110_draw_line8_lblp_rgb,BITS),
+ glue(pl110_draw_line16_lblp_rgb,BITS),
+ glue(pl110_draw_line32_lblp_rgb,BITS),
+
+ glue(pl110_draw_line1_bbbp_rgb,BITS),
+ glue(pl110_draw_line2_bbbp_rgb,BITS),
+ glue(pl110_draw_line4_bbbp_rgb,BITS),
+ glue(pl110_draw_line8_bbbp_rgb,BITS),
+ glue(pl110_draw_line16_bbbp_rgb,BITS),
+ glue(pl110_draw_line32_bbbp_rgb,BITS),
+
+ glue(pl110_draw_line1_lbbp_rgb,BITS),
+ glue(pl110_draw_line2_lbbp_rgb,BITS),
+ glue(pl110_draw_line4_lbbp_rgb,BITS),
+ glue(pl110_draw_line8_lbbp_rgb,BITS),
+ glue(pl110_draw_line16_lbbp_rgb,BITS),
+ glue(pl110_draw_line32_lbbp_rgb,BITS),
};
#undef BITS
@@ -61,18 +92,18 @@
#else
#if ORDER == 0
-#define NAME glue(lblp, BITS)
+#define NAME glue(glue(lblp_, BORDER), BITS)
#ifdef WORDS_BIGENDIAN
#define SWAP_WORDS 1
#endif
#elif ORDER == 1
-#define NAME glue(bbbp, BITS)
+#define NAME glue(glue(bbbp_, BORDER), BITS)
#ifndef WORDS_BIGENDIAN
#define SWAP_WORDS 1
#endif
#else
#define SWAP_PIXELS 1
-#define NAME glue(lbbp, BITS)
+#define NAME glue(glue(lbbp_, BORDER), BITS)
#ifdef WORDS_BIGENDIAN
#define SWAP_WORDS 1
#endif
@@ -195,27 +226,34 @@
#ifdef SWAP_WORDS
data = bswap32(data);
#endif
+#ifdef RGB
+#define LSB r
+#define MSB b
+#else
+#define LSB b
+#define MSB r
+#endif
#if 0
- r = data & 0x1f;
+ LSB = data & 0x1f;
data >>= 5;
g = data & 0x3f;
data >>= 6;
- b = data & 0x1f;
+ MSB = data & 0x1f;
data >>= 5;
#else
- r = (data & 0x1f) << 3;
+ LSB = (data & 0x1f) << 3;
data >>= 5;
g = (data & 0x3f) << 2;
data >>= 6;
- b = (data & 0x1f) << 3;
+ MSB = (data & 0x1f) << 3;
data >>= 5;
#endif
COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
- r = (data & 0x1f) << 3;
+ LSB = (data & 0x1f) << 3;
data >>= 5;
g = (data & 0x3f) << 2;
data >>= 6;
- b = (data & 0x1f) << 3;
+ MSB = (data & 0x1f) << 3;
data >>= 5;
COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
width -= 2;
@@ -229,14 +267,21 @@
unsigned int r, g, b;
while (width > 0) {
data = *(uint32_t *)src;
+#ifdef RGB
+#define LSB r
+#define MSB b
+#else
+#define LSB b
+#define MSB r
+#endif
#ifdef SWAP_WORDS
- r = data & 0xff;
+ LSB = data & 0xff;
g = (data >> 8) & 0xff;
- b = (data >> 16) & 0xff;
+ MSB = (data >> 16) & 0xff;
#else
- r = (data >> 24) & 0xff;
+ LSB = (data >> 24) & 0xff;
g = (data >> 16) & 0xff;
- b = (data >> 8) & 0xff;
+ MSB = (data >> 8) & 0xff;
#endif
COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
width--;

View File

@ -1,9 +1,12 @@
LICENSE = "GPL"
PV = "0.8.0+cvs${SRCDATE}"
PR = "r1"
SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
file://nodocs_cvs.patch;patch=1 \
file://configure.patch;patch=1"
file://configure.patch;patch=1 \
file://mouse_fix-r0.patch;patch=1 \
file://pl110_rgb-r0.patch;patch=1"
S = "${WORKDIR}/qemu"