various enhancement tweaks
[pcsx_rearmed.git] / plugins / gpulib / cspace.c
index eee56ce..1d5718c 100644 (file)
@@ -1,9 +1,14 @@
 #include "cspace.h"
 
+/*
+ * note: these are intended for testing and should be avoided
+ * in favor of NEON version or platform-specific conversion
+ */
+
 void bgr555_to_rgb565(void *dst_, const void *src_, int bytes)
 {
-       unsigned int *src = (unsigned int *)src_;
-       unsigned int *dst = (unsigned int *)dst_;
+       const unsigned int *src = src_;
+       unsigned int *dst = dst_;
        unsigned int p;
        int x;
 
@@ -15,7 +20,25 @@ void bgr555_to_rgb565(void *dst_, const void *src_, int bytes)
        }
 }
 
+void bgr888_to_rgb565(void *dst_, const void *src_, int bytes)
+{
+       const unsigned char *src = src_;
+       unsigned int *dst = dst_;
+       unsigned int r1, g1, b1, r2, g2, b2;
+
+       for (; bytes >= 6; bytes -= 6, src += 6, dst++) {
+               r1 = src[0] & 0xf8;
+               g1 = src[1] & 0xfc;
+               b1 = src[2] & 0xf8;
+               r2 = src[3] & 0xf8;
+               g2 = src[4] & 0xfc;
+               b2 = src[5] & 0xf8;
+               *dst = (r2 << 24) | (g2 << 19) | (b2 << 13) |
+                       (r1 << 8) | (g1 << 3) | (b1 >> 3);
+       }
+}
+
 // TODO?
+void rgb888_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) {}