fix softfx scaler hq3xs
This commit is contained in:
parent
24d010b29c
commit
566018c757
|
@ -25,7 +25,7 @@ depobj += about.o bzip.o choose_monitor.o cona.o debugger.o drv.o d3dkmt_sync.o
|
|||
aud_dsp.o aud_interface.o cd_interface.o inp_interface.o interface.o lowpass2.o prf_interface.o vid_interface.o \
|
||||
vid_softfx.o vid_support.o \
|
||||
\
|
||||
2xpm.o 2xsai.o crt.o ddt3x.o epx.o hq2xs.o hq2xs_16.o xbr.o xbr32.o \
|
||||
2xpm.o 2xsai.o crt.o ddt3x.o epx.o hq2xs.o hq2xs_16.o hq3xs.o hq_shared32.o xbr.o xbr32.o \
|
||||
\
|
||||
aud_dsound3.o aud_xaudio2.o cd_img.o ddraw_core.o dinput_core.o directx9_core.o dsound_core.o \
|
||||
inp_dinput.o prf_performance_counter.o vid_d3d.o vid_ddraw.o vid_ddrawfx.o vid_effect.o vid_directx9.o vid_directx_support.o
|
||||
|
|
|
@ -1279,7 +1279,7 @@ BEGIN
|
|||
MENUITEM "hq3x Filter", MENU_ENHANCED_SOFT_HQ3X
|
||||
MENUITEM "hq4x Filter", MENU_ENHANCED_SOFT_HQ4X
|
||||
MENUITEM "hq2xS (VBA) Filter", MENU_ENHANCED_SOFT_HQ2XS_VBA
|
||||
MENUITEM "hq3xS (VBA) Filter", MENU_ENHANCED_SOFT_HQ3XS_VBA, GRAYED
|
||||
MENUITEM "hq3xS (VBA) Filter", MENU_ENHANCED_SOFT_HQ3XS_VBA
|
||||
MENUITEM "hq2xS (SNES9X) Filter", MENU_ENHANCED_SOFT_HQ2XS_SNES9X
|
||||
MENUITEM "hq3xS (SNEX9X) Filter", MENU_ENHANCED_SOFT_HQ3XS_SNES9X
|
||||
MENUITEM "hq2xBold Filter", MENU_ENHANCED_SOFT_HQ2XBOLD
|
||||
|
|
|
@ -1303,7 +1303,7 @@ void MenuEnableItems()
|
|||
|
||||
EnableMenuItem(hMenu, MENU_MODELESS, MF_ENABLED | MF_BYCOMMAND);
|
||||
|
||||
#if defined _MSC_VER && defined BUILD_X86_ASM
|
||||
#if defined BUILD_X86_ASM
|
||||
EnableMenuItem(hBlitterMenu[1], MENU_ENHANCED_SOFT_HQ3XS_VBA, MF_ENABLED | MF_BYCOMMAND);
|
||||
EnableMenuItem(hBlitterMenu[2], MENU_SOFTFX_SOFT_HQ3XS_VBA, MF_ENABLED | MF_BYCOMMAND);
|
||||
EnableMenuItem(hBlitterMenu[4], MENU_DX9_ALT_SOFT_HQ3XS_VBA, MF_ENABLED | MF_BYCOMMAND);
|
||||
|
|
|
@ -16,16 +16,20 @@
|
|||
// along with this program; if not, write to the Free Software Foundation,
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
#define USE_C_CODE 1
|
||||
#include "burnint.h"
|
||||
#include "hq_shared32.h"
|
||||
|
||||
const unsigned __int64 reg_blank = 0x0000000000000000;
|
||||
const unsigned __int64 const7 = 0x0000000700070007;
|
||||
const unsigned __int64 treshold = 0x0000000000300706;
|
||||
const UINT64 reg_blank = 0x0000000000000000;
|
||||
const UINT64 const7 = 0x0000000700070007;
|
||||
const UINT64 treshold = 0x0000000000300706;
|
||||
|
||||
void Interp1(unsigned char * pc, unsigned int c1, unsigned int c2)
|
||||
{
|
||||
//*((int*)pc) = (c1*3+c2)/4;
|
||||
|
||||
#ifdef USE_C_CODE
|
||||
*((int*)pc) = (c1*3+c2)/4;
|
||||
#else
|
||||
#ifdef MMX
|
||||
__asm
|
||||
{
|
||||
|
@ -52,12 +56,14 @@ void Interp1(unsigned char * pc, unsigned int c1, unsigned int c2)
|
|||
mov [eax], edx
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void Interp2(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
||||
{
|
||||
//*((int*)pc) = (c1*2+c2+c3)/4;
|
||||
|
||||
#ifdef USE_C_CODE
|
||||
*((int*)pc) = (c1*2+c2+c3)/4;
|
||||
#else
|
||||
#ifdef MMX
|
||||
__asm
|
||||
{
|
||||
|
@ -84,14 +90,16 @@ void Interp2(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int
|
|||
mov [eax], edx
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void Interp3(unsigned char * pc, unsigned int c1, unsigned int c2)
|
||||
{
|
||||
//*((int*)pc) = (c1*7+c2)/8;
|
||||
//*((int*)pc) = ((((c1 & 0x00FF00)*7 + (c2 & 0x00FF00) ) & 0x0007F800) +
|
||||
// (((c1 & 0xFF00FF)*7 + (c2 & 0xFF00FF) ) & 0x07F807F8)) >> 3;
|
||||
|
||||
#ifdef USE_C_CODE
|
||||
*((int*)pc) = (c1*7+c2)/8;
|
||||
*((int*)pc) = ((((c1 & 0x00FF00)*7 + (c2 & 0x00FF00) ) & 0x0007F800) +
|
||||
(((c1 & 0xFF00FF)*7 + (c2 & 0xFF00FF) ) & 0x07F807F8)) >> 3;
|
||||
#else
|
||||
#ifdef MMX
|
||||
__asm
|
||||
{
|
||||
|
@ -121,14 +129,16 @@ void Interp3(unsigned char * pc, unsigned int c1, unsigned int c2)
|
|||
mov [eax], ecx
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void Interp4(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int c3)
|
||||
{
|
||||
//*((int*)pc) = (c1*2+(c2+c3)*7)/16;
|
||||
//*((int*)pc) = ((((c1 & 0x00FF00)*2 + ((c2 & 0x00FF00) + (c3 & 0x00FF00))*7 ) & 0x000FF000) +
|
||||
// (((c1 & 0xFF00FF)*2 + ((c2 & 0xFF00FF) + (c3 & 0xFF00FF))*7 ) & 0x0FF00FF0)) >> 4;
|
||||
|
||||
#ifdef USE_C_CODE
|
||||
*((int*)pc) = (c1*2+(c2+c3)*7)/16;
|
||||
*((int*)pc) = ((((c1 & 0x00FF00)*2 + ((c2 & 0x00FF00) + (c3 & 0x00FF00))*7 ) & 0x000FF000) +
|
||||
(((c1 & 0xFF00FF)*2 + ((c2 & 0xFF00FF) + (c3 & 0xFF00FF))*7 ) & 0x0FF00FF0)) >> 4;
|
||||
#else
|
||||
#ifdef MMX
|
||||
__asm
|
||||
{
|
||||
|
@ -183,12 +193,14 @@ void Interp4(unsigned char * pc, unsigned int c1, unsigned int c2, unsigned int
|
|||
mov [ebx], eax
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void Interp5(unsigned char * pc, unsigned int c1, unsigned int c2)
|
||||
{
|
||||
//*((int*)pc) = (c1+c2)/2;
|
||||
|
||||
#ifdef USE_C_CODE
|
||||
*((int*)pc) = (c1+c2)/2;
|
||||
#else
|
||||
#ifdef MMX
|
||||
__asm
|
||||
{
|
||||
|
@ -210,6 +222,7 @@ void Interp5(unsigned char * pc, unsigned int c1, unsigned int c2)
|
|||
mov [eax], edx
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -259,6 +272,12 @@ bool Diff(unsigned int c1, unsigned int c2)
|
|||
|
||||
if (YUV1 == YUV2) return false; // Save some processing power
|
||||
|
||||
#ifdef USE_C_CODE
|
||||
return
|
||||
( abs32((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) ||
|
||||
( abs32((YUV1 & Umask) - (YUV2 & Umask)) > trU ) ||
|
||||
( abs32((YUV1 & Vmask) - (YUV2 & Vmask)) > trV );
|
||||
#else
|
||||
#ifdef MMX
|
||||
unsigned int retval;
|
||||
__asm
|
||||
|
@ -328,11 +347,22 @@ bool Diff(unsigned int c1, unsigned int c2)
|
|||
( abs32((YUV1 & Umask) - (YUV2 & Umask)) > trU ) ||
|
||||
( abs32((YUV1 & Vmask) - (YUV2 & Vmask)) > trV );
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
unsigned int RGBtoYUV(unsigned int c)
|
||||
{ // Division through 3 slows down the emulation about 10% !!!
|
||||
#ifdef USE_C_CODE
|
||||
unsigned char r, g, b, Y, u, v;
|
||||
r = (c & 0x000000FF);
|
||||
g = (c & 0x0000FF00) >> 8;
|
||||
b = (c & 0x00FF0000) >> 16;
|
||||
Y = (r + g + b) >> 2;
|
||||
u = 128 + ((r - b) >> 2);
|
||||
v = 128 + ((-r + 2*g -b)>>3);
|
||||
return (Y<<16) + (u<<8) + v;
|
||||
#else
|
||||
#ifdef MMX
|
||||
unsigned int retval;
|
||||
__asm
|
||||
|
@ -410,4 +440,5 @@ unsigned int RGBtoYUV(unsigned int c)
|
|||
//v = (0.439216 * r - 0.367788 * g - 0.071427 * b) + 128;
|
||||
//return (y << 16) + (u << 8) + v;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
#define abs32(value) (value & 0x7FFFFFFF)
|
||||
#define abs16(value) (value & 0x7FFF)
|
||||
#define abs32(value) ((value) & 0x7FFFFFFF)
|
||||
#define abs16(value) ((value) & 0x7FFF)
|
||||
|
||||
const int Ymask = 0x00FF0000;
|
||||
const int Umask = 0x0000FF00;
|
||||
|
|
|
@ -25,7 +25,7 @@ void _2xpm_hq(void *SrcPtr, void *DstPtr, unsigned long SrcPitch, unsigned long
|
|||
extern void hq2xS_init(unsigned bits_per_pixel);
|
||||
extern void hq2xS(unsigned char*, unsigned int, unsigned char*, unsigned char*, unsigned int, int, int);
|
||||
extern void hq2xS32(unsigned char*, unsigned int, unsigned char*, unsigned char*, unsigned int, int, int);
|
||||
#if defined _MSC_VER && defined BUILD_X86_ASM
|
||||
#if defined BUILD_X86_ASM
|
||||
extern void hq3xS(unsigned char*,unsigned int,unsigned char*,unsigned char*,unsigned int,int,int);
|
||||
extern void hq3xS32(unsigned char*,unsigned int,unsigned char*,unsigned char*,unsigned int,int,int);
|
||||
#endif
|
||||
|
@ -881,7 +881,7 @@ void VidSoftFXApplyEffect(unsigned char* ps, unsigned char* pd, int nPitch)
|
|||
break;
|
||||
}
|
||||
case FILTER_HQ3XS_VBA: { // hq3xS filter (16/32BPP only)
|
||||
#if defined _MSC_VER && defined BUILD_X86_ASM
|
||||
#if defined BUILD_X86_ASM
|
||||
if (nVidImageDepth == 16) {
|
||||
hq3xS(ps, nSoftFXImagePitch, NULL, pd, nPitch, nSoftFXImageWidth, nSoftFXImageHeight);
|
||||
} else if (nVidImageDepth == 32) {
|
||||
|
|
Loading…
Reference in New Issue