AxibugEmuOnline/virtuanessrc097-master/Render.h

714 lines
34 KiB
C
Raw Normal View History

<EFBFBD><EFBFBD>//
// Render
//
// 16bit Render
void CDirectDraw::Render16bpp( LPBYTE lpSrc, LPBYTE lpDst )
{
LPBYTE pPal;
DWORD width;
DWORD pitch = SCREEN_WIDTH*sizeof(WORD);
for( INT i = 0; i < SCREEN_HEIGHT; i++ ) {
if( !(m_LineColormode[i]&0x80) ) {
pPal = (LPBYTE)m_cnPalette[m_LineColormode[i]&0x07];
} else {
pPal = (LPBYTE)m_mnPalette[m_LineColormode[i]&0x07];
}
width = SCREEN_WIDTH;
__asm {
mov eax, lpSrc
mov esi, pPal
mov edi, lpDst
_r16b_loop:
mov edx, [eax+0]
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 0], cx
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 2], cx
movzx ecx, dl
shr edx, 8
mov ecx, [esi+ecx*4]
mov edx, [esi+edx*4]
mov [edi+ 4], cx
mov [edi+ 6], dx
mov edx, [eax+4]
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 8], cx
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+10], cx
movzx ecx, dl
shr edx, 8
mov ecx, [esi+ecx*4]
mov edx, [esi+edx*4]
mov [edi+12], cx
mov [edi+14], dx
lea eax, [eax+ 8]
lea edi, [edi+16]
sub width, 8
jg _r16b_loop
}
lpSrc += RENDER_WIDTH;
lpDst += SCREEN_WIDTH*sizeof(WORD);
}
}
// 16bit Pre-Render
void CDirectDraw::Render16bppPrefilter( LPBYTE lpSrc, LPBYTE lpDst )
{
LPBYTE pPal;
DWORD width;
DWORD pitch = SCREEN_WIDTH*sizeof(WORD);
for( INT i = 0; i < SCREEN_HEIGHT; i++ ) {
if( !(m_LineColormode[i]&0x80) ) {
pPal = (LPBYTE)m_cfPalette[m_LineColormode[i]&0x07];
} else {
pPal = (LPBYTE)m_mfPalette[m_LineColormode[i]&0x07];
}
width = SCREEN_WIDTH;
__asm {
mov eax, lpSrc
mov esi, pPal
mov edi, lpDst
_r16b_pf_loop:
mov edx, [eax+0]
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 0], cx
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 2], cx
movzx ecx, dl
shr edx, 8
mov ecx, [esi+ecx*4]
mov edx, [esi+edx*4]
mov [edi+ 4], cx
mov [edi+ 6], dx
mov edx, [eax+4]
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 8], cx
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+10], cx
movzx ecx, dl
shr edx, 8
mov ecx, [esi+ecx*4]
mov edx, [esi+edx*4]
mov [edi+12], cx
mov [edi+14], dx
lea eax, [eax+ 8]
lea edi, [edi+16]
sub width, 8
jg _r16b_pf_loop
}
lpSrc += RENDER_WIDTH;
lpDst += SCREEN_WIDTH*sizeof(WORD);
}
}
// 32bit Render
void CDirectDraw::Render32bpp( LPBYTE lpSrc, LPBYTE lpDst )
{
LPBYTE pPal;
DWORD width;
DWORD pitch = SCREEN_WIDTH*sizeof(DWORD);
for( INT i = 0; i < SCREEN_HEIGHT; i++ ) {
if( !(m_LineColormode[i]&0x80) ) {
pPal = (LPBYTE)m_cnPalette[m_LineColormode[i]&0x07];
} else {
pPal = (LPBYTE)m_mnPalette[m_LineColormode[i]&0x07];
}
width = SCREEN_WIDTH;
__asm {
mov eax, lpSrc
mov esi, pPal
mov edi, lpDst
_r32b_loop:
mov edx, [eax+0]
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 0], ecx
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+ 4], ecx
movzx ecx, dl
shr edx, 8
mov ecx, [esi+ecx*4]
mov edx, [esi+edx*4]
mov [edi+ 8], ecx
mov [edi+12], edx
mov edx, [eax+4]
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+16], ecx
movzx ecx, dl
mov ecx, [esi+ecx*4]
shr edx, 8
mov [edi+20], ecx
movzx ecx, dl
shr edx, 8
mov ecx, [esi+ecx*4]
mov edx, [esi+edx*4]
mov [edi+24], ecx
mov [edi+28], edx
lea eax, [eax+ 8]
lea edi, [edi+32]
sub width, 8
jg _r32b_loop
}
lpSrc += RENDER_WIDTH;
lpDst += SCREEN_WIDTH*sizeof(DWORD);
}
}
// Normal/Scanline/Double/DoubleScanlie Render
#include "Render8bpp.h"
#include "Render16bpp.h"
#include "Render24bpp.h"
#include "Render32bpp.h"
typedef signed char eI8;
typedef signed short eI16;
typedef signed long eI32;
typedef signed __int64 eI64;
typedef unsigned char euI8;
typedef unsigned short euI16;
typedef unsigned long euI32;
typedef unsigned __int64 euI64;
static euI64 ONE = 0x0001000100010001;
static euI64 cMask;
static euI64 qMask;
static euI64 lMask;
static euI64 ACPixel;
static euI64 Mask1;
static euI64 Mask2;
static euI64 I56Pixel;
static euI64 I5556Pixel;
static euI64 I5666Pixel;
static euI64 I23Pixel;
static euI64 I2223Pixel;
static euI64 I2333Pixel;
static euI64 Mask26;
static euI64 Mask35;
static euI64 Mask26b;
static euI64 Mask35b;
static euI64 product1a;
static euI64 product1b;
static euI64 product2a;
static euI64 product2b;
static euI64 final1a;
static euI64 final1b;
static euI64 final2a;
static euI64 final2b;
#define colorI -2
#define colorE 0
#define colorF 2
#define colorJ 4
#define colorG -2
#define colorA 0
#define colorB 2
#define colorK 4
#define colorH -2
#define colorC 0
#define colorD 2
#define colorL 4
#define colorM -2
#define colorN 0
#define colorO 2
#define colorP 4
#define colorB0 -2
#define colorB1 0
#define colorB2 2
#define colorB3 4
#define color4 -2
#define color5 0
#define color6 2
#define colorS2 4
#define color1 -2
#define color2 0
#define color3 2
#define colorS1 4
#define colorA0 -2
#define colorA1 0
#define colorA2 2
#define colorA3 4
// Filtering Render
#include "nx_2xSaI.h"
#include "nx_Super2xSaI.h"
#include "nx_SuperEagle.h"
#include "nx_Scale2x.h"
#include "nx_hq2x.h" // include lq2x
void CDirectDraw::nx_2xSaI_16bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
LPBYTE pScn = new BYTE[SCREEN_WIDTH*(SCREEN_HEIGHT+6)*sizeof(WORD)];
// Pre-Rendering
Render16bpp( lpRdr, &pScn[SCREEN_WIDTH*2*sizeof(WORD)] );
euI8* srcPtr = (euI8*)&pScn[SCREEN_WIDTH*2*sizeof(WORD)];
euI32 srcPitch = SCREEN_WIDTH*sizeof(WORD);
euI8* deltaPtr = (euI8*)lpDlt;
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = (euI32)ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
if( ddsd.ddpfPixelFormat.dwGBitMask == 0x01E0 ) {
// 555
cMask = 0x7BDE7BDE7BDE7BDE;
qMask = 0x739C739C739C739C;
lMask = 0x0C630C630C630C63;
} else {
// 565
cMask = 0xF7DEF7DEF7DEF7DE;
qMask = 0xE79CE79CE79CE79C;
lMask = 0x1863186318631863;
}
for( ; height; height-- ) {
nx_2xSaILine_16bpp_mmx( srcPtr, deltaPtr, srcPitch, width, dstPtr, dstPitch, bForceWrite );
srcPtr += srcPitch;
dstPtr += dstPitch * 2;
deltaPtr += srcPitch;
}
delete[] pScn;
}
void CDirectDraw::nx_2xSaI_32bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
LPBYTE pScn = new BYTE[SCREEN_WIDTH*(SCREEN_HEIGHT+6)*sizeof(WORD)];
// Pre-Rendering
Render16bppPrefilter( lpRdr, &pScn[SCREEN_WIDTH*2*sizeof(WORD)] );
euI8* srcPtr = (euI8*)&pScn[SCREEN_WIDTH*2*sizeof(WORD)];
euI32 srcPitch = SCREEN_WIDTH*sizeof(WORD);
euI8* deltaPtr = (euI8*)lpDlt;
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = (euI32)ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
// 555
cMask = 0x7BDE7BDE7BDE7BDE;
qMask = 0x739C739C739C739C;
lMask = 0x0C630C630C630C63;
for( ; height; height-- ) {
nx_2xSaILine_32bpp_mmx( srcPtr, deltaPtr, srcPitch, width, dstPtr, dstPitch, bForceWrite );
srcPtr += srcPitch;
dstPtr += dstPitch * 2;
deltaPtr += srcPitch;
}
delete[] pScn;
}
void CDirectDraw::nx_Super2xSaI_16bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
LPBYTE pScn = new BYTE[SCREEN_WIDTH*(SCREEN_HEIGHT+6)*sizeof(WORD)];
// Pre-Rendering
Render16bpp( lpRdr, &pScn[SCREEN_WIDTH*2*sizeof(WORD)] );
euI8* srcPtr = (euI8*)&pScn[SCREEN_WIDTH*2*sizeof(WORD)];
euI32 srcPitch = SCREEN_WIDTH*sizeof(WORD);
euI8* deltaPtr = (euI8*)lpDlt;
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = (euI32)ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
if( ddsd.ddpfPixelFormat.dwGBitMask == 0x01E0 ) {
// 555
cMask = 0x7BDE7BDE7BDE7BDE;
qMask = 0x739C739C739C739C;
lMask = 0x0C630C630C630C63;
} else {
// 565
cMask = 0xF7DEF7DEF7DEF7DE;
qMask = 0xE79CE79CE79CE79C;
lMask = 0x1863186318631863;
}
for( ; height; height-- ) {
nx_Super2xSaILine_16bpp_mmx( srcPtr, deltaPtr, srcPitch, width, dstPtr, dstPitch, bForceWrite );
srcPtr += srcPitch;
dstPtr += dstPitch * 2;
deltaPtr += srcPitch;
}
delete[] pScn;
}
void CDirectDraw::nx_Super2xSaI_32bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
LPBYTE pScn = new BYTE[SCREEN_WIDTH*(SCREEN_HEIGHT+6)*sizeof(WORD)];
// Pre-Rendering
Render16bppPrefilter( lpRdr, &pScn[SCREEN_WIDTH*2*sizeof(WORD)] );
euI8* srcPtr = (euI8*)&pScn[SCREEN_WIDTH*2*sizeof(WORD)];
euI32 srcPitch = SCREEN_WIDTH*sizeof(WORD);
euI8* deltaPtr = (euI8*)lpDlt;
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = (euI32)ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
// 555
cMask = 0x7BDE7BDE7BDE7BDE;
qMask = 0x739C739C739C739C;
lMask = 0x0C630C630C630C63;
for( ; height; height-- ) {
nx_Super2xSaILine_32bpp_mmx( srcPtr, deltaPtr, srcPitch, width, dstPtr, dstPitch, bForceWrite );
srcPtr += srcPitch;
dstPtr += dstPitch * 2;
deltaPtr += srcPitch;
}
delete[] pScn;
}
void CDirectDraw::nx_SuperEagle_16bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
LPBYTE pScn = new BYTE[SCREEN_WIDTH*(SCREEN_HEIGHT+6)*sizeof(WORD)];
// Pre-Rendering
Render16bpp( lpRdr, &pScn[SCREEN_WIDTH*2*sizeof(WORD)] );
euI8* srcPtr = (euI8*)&pScn[SCREEN_WIDTH*2*sizeof(WORD)];
euI32 srcPitch = SCREEN_WIDTH*sizeof(WORD);
euI8* deltaPtr = (euI8*)lpDlt;
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = (euI32)ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
if( ddsd.ddpfPixelFormat.dwGBitMask == 0x01E0 ) {
// 555
cMask = 0x7BDE7BDE7BDE7BDE;
qMask = 0x739C739C739C739C;
lMask = 0x0C630C630C630C63;
} else {
// 565
cMask = 0xF7DEF7DEF7DEF7DE;
qMask = 0xE79CE79CE79CE79C;
lMask = 0x1863186318631863;
}
for( ; height; height-- ) {
nx_SuperEagleLine_16bpp_mmx( srcPtr, deltaPtr, srcPitch, width, dstPtr, dstPitch, bForceWrite );
srcPtr += srcPitch;
dstPtr += dstPitch * 2;
deltaPtr += srcPitch;
}
delete[] pScn;
}
void CDirectDraw::nx_SuperEagle_32bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
LPBYTE pScn = new BYTE[SCREEN_WIDTH*(SCREEN_HEIGHT+6)*sizeof(WORD)];
// Pre-Rendering
Render16bppPrefilter( lpRdr, &pScn[SCREEN_WIDTH*2*sizeof(WORD)] );
euI8* srcPtr = (euI8*)&pScn[SCREEN_WIDTH*2*sizeof(WORD)];
euI32 srcPitch = SCREEN_WIDTH*sizeof(WORD);
euI8* deltaPtr = (euI8*)lpDlt;
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = (euI32)ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
// 555
cMask = 0x7BDE7BDE7BDE7BDE;
qMask = 0x739C739C739C739C;
lMask = 0x0C630C630C630C63;
for( ; height; height-- ) {
nx_SuperEagleLine_32bpp_mmx( srcPtr, deltaPtr, srcPitch, width, dstPtr, dstPitch, bForceWrite );
srcPtr += srcPitch;
dstPtr += dstPitch * 2;
deltaPtr += srcPitch;
}
delete[] pScn;
}
void CDirectDraw::nx_Scale2x_16bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
// Pre-Rendering
Render16bpp( lpRdr, lpDlt );
euI8* srcPtr = (euI8*)lpDlt;
euI32 srcPitch = SCREEN_WIDTH * sizeof(euI16);
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
euI16 *dst0 = (euI16*)dstPtr;
euI16 *dst1 = dst0 + (dstPitch/2);
euI16 *src0 = (euI16*)lpDlt;
euI16 *src1 = src0 + (srcPitch/2);
euI16 *src2 = src1 + (srcPitch/2);
internal_scale2x_16_mmx( dst0, dst1, src0, src0, src1, width );
int count = height;
count -= 2;
while( count ) {
dst0 += dstPitch;
dst1 += dstPitch;
internal_scale2x_16_mmx( dst0, dst1, src0, src1, src2, width );
src0 = src1;
src1 = src2;
src2 += srcPitch/2;
--count;
}
dst0 += dstPitch;
dst1 += dstPitch;
internal_scale2x_16_mmx( dst0, dst1, src0, src1, src1, width );
}
void CDirectDraw::nx_Scale2x_32bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
// Pre-Rendering
Render32bpp( lpRdr, lpDlt );
euI8* srcPtr = (euI8*)lpDlt;
euI32 srcPitch = SCREEN_WIDTH * sizeof(euI32);
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
euI32 *dst0 = (euI32*)dstPtr;
euI32 *dst1 = dst0 + (dstPitch/4);
euI32 *src0 = (euI32*)lpDlt;
euI32 *src1 = src0 + (srcPitch/4);
euI32 *src2 = src1 + (srcPitch/4);
internal_scale2x_32_mmx( dst0, dst1, src0, src0, src1, width );
int count = height;
count -= 2;
while( count ) {
dst0 += dstPitch/2;
dst1 += dstPitch/2;
internal_scale2x_32_mmx( dst0, dst1, src0, src1, src2, width );
src0 = src1;
src1 = src2;
src2 += srcPitch/4;
--count;
}
dst0 += dstPitch/2;
dst1 += dstPitch/2;
internal_scale2x_32_mmx( dst0, dst1, src0, src1, src1, width );
}
void CDirectDraw::nx_hq2x_16bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
// Pre-Rendering
Render16bpp( lpRdr, lpDlt );
euI8* srcPtr = (euI8*)lpDlt;
euI32 srcPitch = SCREEN_WIDTH * sizeof(euI16);
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
euI16 *dst0 = (euI16*)dstPtr;
euI16 *dst1 = dst0 + (dstPitch/2);
euI16 *src0 = (euI16*)lpDlt;
euI16 *src1 = src0 + (srcPitch/2);
euI16 *src2 = src1 + (srcPitch/2);
if( ddsd.ddpfPixelFormat.dwGBitMask == 0x01E0 ) {
interp_set( 15 );
} else {
interp_set( 16 );
}
hq2x_16_def( dst0, dst1, src0, src0, src1, width );
int count = height;
count -= 2;
while( count ) {
dst0 += dstPitch;
dst1 += dstPitch;
hq2x_16_def( dst0, dst1, src0, src1, src2, width );
src0 = src1;
src1 = src2;
src2 += srcPitch/2;
--count;
}
dst0 += dstPitch;
dst1 += dstPitch;
hq2x_16_def( dst0, dst1, src0, src1, src1, width );
}
void CDirectDraw::nx_hq2x_32bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
// Pre-Rendering
Render32bpp( lpRdr, lpDlt );
euI8* srcPtr = (euI8*)lpDlt;
euI32 srcPitch = SCREEN_WIDTH * sizeof(euI32);
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
euI32 *dst0 = (euI32*)dstPtr;
euI32 *dst1 = dst0 + (dstPitch/4);
euI32 *src0 = (euI32*)lpDlt;
euI32 *src1 = src0 + (srcPitch/4);
euI32 *src2 = src1 + (srcPitch/4);
interp_set( 32 );
hq2x_32_def( dst0, dst1, src0, src0, src1, width );
int count = height;
count -= 2;
while( count ) {
dst0 += dstPitch/2;
dst1 += dstPitch/2;
hq2x_32_def( dst0, dst1, src0, src1, src2, width );
src0 = src1;
src1 = src2;
src2 += srcPitch/4;
--count;
}
dst0 += dstPitch/2;
dst1 += dstPitch/2;
hq2x_32_def( dst0, dst1, src0, src1, src1, width );
}
void CDirectDraw::nx_lq2x_16bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
// Pre-Rendering
Render16bpp( lpRdr, lpDlt );
euI8* srcPtr = (euI8*)lpDlt;
euI32 srcPitch = SCREEN_WIDTH * sizeof(euI16);
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
euI16 *dst0 = (euI16*)dstPtr;
euI16 *dst1 = dst0 + (dstPitch/2);
euI16 *src0 = (euI16*)lpDlt;
euI16 *src1 = src0 + (srcPitch/2);
euI16 *src2 = src1 + (srcPitch/2);
if( ddsd.ddpfPixelFormat.dwGBitMask == 0x01E0 ) {
interp_set( 15 );
} else {
interp_set( 16 );
}
lq2x_16_def( dst0, dst1, src0, src0, src1, width );
int count = height;
count -= 2;
while( count ) {
dst0 += dstPitch;
dst1 += dstPitch;
lq2x_16_def( dst0, dst1, src0, src1, src2, width );
src0 = src1;
src1 = src2;
src2 += srcPitch/2;
--count;
}
dst0 += dstPitch;
dst1 += dstPitch;
lq2x_16_def( dst0, dst1, src0, src1, src1, width );
}
void CDirectDraw::nx_lq2x_32bpp( LPBYTE lpRdr, LPBYTE lpDlt, DDSURFACEDESC2& ddsd, BOOL bForceWrite )
{
// Pre-Rendering
Render32bpp( lpRdr, lpDlt );
euI8* srcPtr = (euI8*)lpDlt;
euI32 srcPitch = SCREEN_WIDTH * sizeof(euI32);
euI8* dstPtr = (euI8*)ddsd.lpSurface;
euI32 dstPitch = ddsd.lPitch;
int width = SCREEN_WIDTH;
int height = SCREEN_HEIGHT;
euI32 *dst0 = (euI32*)dstPtr;
euI32 *dst1 = dst0 + (dstPitch/4);
euI32 *src0 = (euI32*)lpDlt;
euI32 *src1 = src0 + (srcPitch/4);
euI32 *src2 = src1 + (srcPitch/4);
interp_set( 32 );
lq2x_32_def( dst0, dst1, src0, src0, src1, width );
int count = height;
count -= 2;
while( count ) {
dst0 += dstPitch/2;
dst1 += dstPitch/2;
lq2x_32_def( dst0, dst1, src0, src1, src2, width );
src0 = src1;
src1 = src2;
src2 += srcPitch/4;
--count;
}
dst0 += dstPitch/2;
dst1 += dstPitch/2;
lq2x_32_def( dst0, dst1, src0, src1, src1, width );
}