frontend: handle 24bpp in sstate preview
authornotaz <notasas@gmail.com>
Sat, 18 Jun 2011 23:21:10 +0000 (02:21 +0300)
committernotaz <notasas@gmail.com>
Thu, 7 Jul 2011 21:15:06 +0000 (00:15 +0300)
frontend/arm_utils.h
frontend/menu.c
frontend/plat_dummy.c

index a5dcb9b..644143b 100644 (file)
@@ -3,9 +3,9 @@ extern "C"
 {
 #endif
 
-void bgr555_to_rgb565(void *dst, void *src, int bytes);
-void bgr888_to_rgb888(void *dst, void *src, int bytes);
-void bgr888_to_rgb565(void *dst, void *src, int bytes);
+void bgr555_to_rgb565(void *dst, const void *src, int bytes);
+void bgr888_to_rgb888(void *dst, const void *src, int bytes);
+void bgr888_to_rgb565(void *dst, const void *src, int bytes);
 
 #ifdef __cplusplus
 }
index 6dc62f3..baf7f2c 100644 (file)
@@ -490,12 +490,12 @@ static void draw_savestate_bg(int slot)
 
        memcpy(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2);
 
-       if ((gpu->ulStatus & 0x800000) || (gpu->ulStatus & 0x200000))
-               goto out; // disabled || 24bpp (NYET)
+       if (gpu->ulStatus & 0x800000)
+               goto out; // disabled
 
        x = gpu->ulControl[5] & 0x3ff;
        y = (gpu->ulControl[5] >> 10) & 0x1ff;
-       s = (u16 *)gpu->psxVRam + y * 1024 + (x & ~3);
+       s = (u16 *)gpu->psxVRam + y * 1024 + (x & ~1);
        w = psx_widths[(gpu->ulStatus >> 16) & 7];
        tmp = gpu->ulControl[7];
        h = ((tmp >> 10) & 0x3ff) - (tmp & 0x3ff);
@@ -509,7 +509,10 @@ static void draw_savestate_bg(int slot)
        d = (u16 *)g_menubg_ptr + g_menuscreen_w * y + x;
 
        for (; h > 0; h--, d += g_menuscreen_w, s += 1024)
-               bgr555_to_rgb565(d, s, w * 2);
+               if (gpu->ulStatus & 0x200000)
+                       bgr888_to_rgb565(d, s, w * 3);
+               else
+                       bgr555_to_rgb565(d, s, w * 2);
 
 out:
        free(gpu);
index a43662b..44ba4a8 100644 (file)
@@ -51,6 +51,10 @@ void bgr888_to_rgb888(void *d, void *s, int len)
 {
 }
 
+void bgr888_to_rgb565(void *d, void *s, int len)
+{
+}
+
 void in_update_analogs(void)
 {
 }