mame: rework ogl-patch
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
From f2e16fa98a94ed51d04540e7b53ffdf0bc7b5b57 Mon Sep 17 00:00:00 2001
|
||||
From 611f9b13acd4c08aa8d36054c5eccdbec237c673 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
|
||||
Date: Sat, 2 Mar 2019 23:13:27 +0100
|
||||
Subject: [PATCH] OSD/OpenGl: Improve performance by moving calculations out of
|
||||
@@ -7,71 +7,114 @@ MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This one was triggered by missile.
|
||||
This one was triggered by batman.
|
||||
|
||||
Test case:
|
||||
mame64 -nothrottle missile
|
||||
mame64 -nothrottle batman
|
||||
|
||||
Before: Average speed: 312.49% (58 seconds)
|
||||
After: Average speed: 319.34% (58 seconds)
|
||||
Before: Average speed: 312.11% (20 seconds)
|
||||
After: Average speed: 327.43% (19 seconds)
|
||||
|
||||
I am aware that missile tests copyline_palette16() only.
|
||||
Upstream-Status: Submitted [1]
|
||||
|
||||
Upstream-Status: Pending
|
||||
[1] https://github.com/mamedev/mame/pull/4717
|
||||
|
||||
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
|
||||
---
|
||||
src/osd/modules/render/drawogl.cpp | 14 ++++++++------
|
||||
1 file changed, 8 insertions(+), 6 deletions(-)
|
||||
src/osd/modules/render/drawogl.cpp | 32 +++++++++++++++++-------------
|
||||
1 file changed, 18 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp
|
||||
index 98db62fdf1..045dc16954 100644
|
||||
index 98db62fdf1..95345878cf 100644
|
||||
--- a/src/osd/modules/render/drawogl.cpp
|
||||
+++ b/src/osd/modules/render/drawogl.cpp
|
||||
@@ -2055,9 +2055,9 @@ static inline void copyline_palette16(uint32_t *dst, const uint16_t *src, int wi
|
||||
*dst++ = 0xff000000 | palette[*src];
|
||||
@@ -2056,8 +2056,9 @@ static inline void copyline_palette16(uint32_t *dst, const uint16_t *src, int wi
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
- int srcpix = *src++;
|
||||
+ uint32_t palval = palette[*src++];
|
||||
int srcpix = *src++;
|
||||
+ uint32_t dstval = 0xff000000 | palette[srcpix];
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- *dst++ = 0xff000000 | palette[srcpix];
|
||||
+ *dst++ = 0xff000000 | palval;
|
||||
+ *dst++ = dstval;
|
||||
}
|
||||
if (xborderpix)
|
||||
*dst++ = 0xff000000 | palette[*--src];
|
||||
@@ -2078,9 +2078,9 @@ static inline void copyline_palettea16(uint32_t *dst, const uint16_t *src, int w
|
||||
*dst++ = palette[*src];
|
||||
@@ -2079,8 +2080,9 @@ static inline void copyline_palettea16(uint32_t *dst, const uint16_t *src, int w
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
- int srcpix = *src++;
|
||||
+ uint32_t palval = palette[*src++];
|
||||
int srcpix = *src++;
|
||||
+ uint32_t dstval = palette[srcpix];
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- *dst++ = palette[srcpix];
|
||||
+ *dst++ = palval;
|
||||
+ *dst++ = dstval;
|
||||
}
|
||||
if (xborderpix)
|
||||
*dst++ = palette[*--src];
|
||||
@@ -2109,9 +2109,10 @@ static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width,
|
||||
@@ -2109,10 +2111,9 @@ static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width,
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
rgb_t srcpix = *src++;
|
||||
+ uint32_t palval = palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
|
||||
+ uint32_t dstval = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
{
|
||||
- {
|
||||
- *dst++ = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
|
||||
+ *dst++ = 0xff000000 | palval;
|
||||
}
|
||||
- }
|
||||
+ *dst++ = dstval;
|
||||
}
|
||||
if (xborderpix)
|
||||
@@ -2161,8 +2162,9 @@ static inline void copyline_argb32(uint32_t *dst, const uint32_t *src, int width
|
||||
{
|
||||
@@ -2129,11 +2130,9 @@ static inline void copyline_rgb32(uint32_t *dst, const uint32_t *src, int width,
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
rgb_t srcpix = *src++;
|
||||
+ uint32_t palval = palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
|
||||
-
|
||||
+ uint32_t dstval = 0xff000000 | srcpix;
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- {
|
||||
- *dst++ = 0xff000000 | srcpix;
|
||||
- }
|
||||
+ *dst++ = dstval;
|
||||
}
|
||||
if (xborderpix)
|
||||
*dst++ = 0xff000000 | *--src;
|
||||
@@ -2161,8 +2160,9 @@ static inline void copyline_argb32(uint32_t *dst, const uint32_t *src, int width
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
rgb_t srcpix = *src++;
|
||||
+ uint32_t dstval = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- *dst++ = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()];
|
||||
+ *dst++ = (srcpix & 0xff000000) | palval;
|
||||
+ *dst++ = dstval;
|
||||
}
|
||||
if (xborderpix)
|
||||
{
|
||||
@@ -2257,10 +2257,12 @@ static inline void copyline_yuy16_to_argb(uint32_t *dst, const uint16_t *src, in
|
||||
uint16_t srcpix1 = *src++;
|
||||
uint8_t cb = srcpix0 & 0xff;
|
||||
uint8_t cr = srcpix1 & 0xff;
|
||||
+ uint32_t dstval0 = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr);
|
||||
+ uint32_t dstval1 = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr);
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- *dst++ = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr);
|
||||
+ *dst++ = dstval0;
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- *dst++ = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr);
|
||||
+ *dst++ = dstval1;
|
||||
}
|
||||
if (xborderpix)
|
||||
{
|
||||
@@ -2291,10 +2293,12 @@ static inline void copyline_yuy16_to_argb(uint32_t *dst, const uint16_t *src, in
|
||||
uint16_t srcpix1 = *src++;
|
||||
uint8_t cb = srcpix0 & 0xff;
|
||||
uint8_t cr = srcpix1 & 0xff;
|
||||
+ uint32_t dstval0 = ycc_to_rgb(srcpix0 >> 8, cb, cr);
|
||||
+ uint32_t dstval1 = ycc_to_rgb(srcpix1 >> 8, cb, cr);
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- *dst++ = ycc_to_rgb(srcpix0 >> 8, cb, cr);
|
||||
+ *dst++ = dstval0;
|
||||
for (int x2 = 0; x2 < xprescale; x2++)
|
||||
- *dst++ = ycc_to_rgb(srcpix1 >> 8, cb, cr);
|
||||
+ *dst++ = dstval1;
|
||||
}
|
||||
if (xborderpix)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user