mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Draw: Centralize funcs in ColorConv.
This commit is contained in:
parent
915265e531
commit
e869a3979b
3 changed files with 19 additions and 13 deletions
|
@ -172,6 +172,15 @@ void ConvertBGRA8888ToRGBA8888(u32 *dst, const u32 *src, u32 numPixels) {
|
|||
}
|
||||
}
|
||||
|
||||
void ConvertBGRA8888ToRGB888(u8 *dst, const u32 *src, u32 numPixels) {
|
||||
for (uint32_t x = 0; x < numPixels; ++x) {
|
||||
uint32_t c = src[x];
|
||||
dst[x * 3 + 0] = (c >> 16) & 0xFF;
|
||||
dst[x * 3 + 1] = (c >> 8) & 0xFF;
|
||||
dst[x * 3 + 2] = (c >> 0) & 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
void ConvertRGBA8888ToRGBA5551(u16 *dst, const u32 *src, u32 numPixels) {
|
||||
#if _M_SSE >= 0x401
|
||||
const __m128i maskAG = _mm_set1_epi32(0x8000F800);
|
||||
|
@ -280,6 +289,12 @@ void ConvertRGBA8888ToRGBA4444(u16 *dst, const u32 *src, u32 numPixels) {
|
|||
}
|
||||
}
|
||||
|
||||
void ConvertRGBA8888ToRGB888(u8 *dst, const u32 *src, u32 numPixels) {
|
||||
for (uint32_t x = 0; x < numPixels; ++x) {
|
||||
memcpy(dst + x * 3, src + x, 3);
|
||||
}
|
||||
}
|
||||
|
||||
void ConvertRGB565ToRGBA8888(u32 *dst32, const u16 *src, u32 numPixels) {
|
||||
#ifdef _M_SSE
|
||||
const __m128i mask5 = _mm_set1_epi16(0x001f);
|
||||
|
|
|
@ -110,10 +110,12 @@ typedef void (*Convert32bppTo32bppFunc)(u32 *dst, const u32 *src, u32 numPixels)
|
|||
|
||||
void ConvertBGRA8888ToRGBA8888(u32 *dst, const u32 *src, u32 numPixels);
|
||||
#define ConvertRGBA8888ToBGRA8888 ConvertBGRA8888ToRGBA8888
|
||||
void ConvertBGRA8888ToRGB888(u8 *dst, const u32 *src, u32 numPixels);
|
||||
|
||||
void ConvertRGBA8888ToRGBA5551(u16 *dst, const u32 *src, u32 numPixels);
|
||||
void ConvertRGBA8888ToRGB565(u16 *dst, const u32 *src, u32 numPixels);
|
||||
void ConvertRGBA8888ToRGBA4444(u16 *dst, const u32 *src, u32 numPixels);
|
||||
void ConvertRGBA8888ToRGB888(u8 *dst, const u32 *src, u32 numPixels);
|
||||
|
||||
void ConvertBGRA8888ToRGBA5551(u16 *dst, const u32 *src, u32 numPixels);
|
||||
void ConvertBGRA8888ToRGB565(u16 *dst, const u32 *src, u32 numPixels);
|
||||
|
|
|
@ -396,8 +396,6 @@ DrawContext::~DrawContext() {
|
|||
DestroyPresets();
|
||||
}
|
||||
|
||||
// TODO: Use the functions we have in Common/ColorConv.cpp.
|
||||
// Could also make C fake-simd for 64-bit, two 8888 pixels fit in a register :)
|
||||
void ConvertFromRGBA8888(uint8_t *dst, const uint8_t *src, uint32_t dstStride, uint32_t srcStride, uint32_t width, uint32_t height, DataFormat format) {
|
||||
// Must skip stride in the cases below. Some games pack data into the cracks, like MotoGP.
|
||||
const uint32_t *src32 = (const uint32_t *)src;
|
||||
|
@ -415,9 +413,7 @@ void ConvertFromRGBA8888(uint8_t *dst, const uint8_t *src, uint32_t dstStride, u
|
|||
}
|
||||
} else if (format == Draw::DataFormat::R8G8B8_UNORM) {
|
||||
for (uint32_t y = 0; y < height; ++y) {
|
||||
for (uint32_t x = 0; x < width; ++x) {
|
||||
memcpy(dst + x * 3, src32 + x, 3);
|
||||
}
|
||||
ConvertRGBA8888ToRGB888(dst, src32, width);
|
||||
src32 += srcStride;
|
||||
dst += dstStride * 3;
|
||||
}
|
||||
|
@ -455,8 +451,6 @@ void ConvertFromRGBA8888(uint8_t *dst, const uint8_t *src, uint32_t dstStride, u
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: Use the functions we have in Common/ColorConv.cpp.
|
||||
// Could also make C fake-simd for 64-bit, two 8888 pixels fit in a register :)
|
||||
void ConvertFromBGRA8888(uint8_t *dst, const uint8_t *src, uint32_t dstStride, uint32_t srcStride, uint32_t width, uint32_t height, DataFormat format) {
|
||||
// Must skip stride in the cases below. Some games pack data into the cracks, like MotoGP.
|
||||
const uint32_t *src32 = (const uint32_t *)src;
|
||||
|
@ -481,12 +475,7 @@ void ConvertFromBGRA8888(uint8_t *dst, const uint8_t *src, uint32_t dstStride, u
|
|||
}
|
||||
} else if (format == Draw::DataFormat::R8G8B8_UNORM) {
|
||||
for (uint32_t y = 0; y < height; ++y) {
|
||||
for (uint32_t x = 0; x < width; ++x) {
|
||||
uint32_t c = src32[x];
|
||||
dst[x * 3 + 0] = (c >> 16) & 0xFF;
|
||||
dst[x * 3 + 1] = (c >> 8) & 0xFF;
|
||||
dst[x * 3 + 2] = (c >> 0) & 0xFF;
|
||||
}
|
||||
ConvertBGRA8888ToRGB888(dst, src32, width);
|
||||
src32 += srcStride;
|
||||
dst += dstStride * 3;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue