remove assembler version of copyImage because it is not faster as C version
declare copyImage as inline move code from display.cpp to Display.h delete display.cpp
This commit is contained in:
parent
cbaeb7c3be
commit
4a503ef5cf
|
@ -1339,10 +1339,6 @@
|
|||
RelativePath=".\src\win32\DirectSound.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\win32\display.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\win32\glfont.c"
|
||||
>
|
||||
|
|
|
@ -43,4 +43,46 @@ class IDisplay {
|
|||
virtual int selectFullScreenMode(GUID **) = 0;
|
||||
};
|
||||
|
||||
void copyImage( void *source, void *destination, unsigned int width, unsigned int height, unsigned int destinationPitch, unsigned int colorDepth );
|
||||
inline void copyImage( void *source, void *destination, unsigned int width, unsigned int height, unsigned int destinationPitch, unsigned int colorDepth )
|
||||
{
|
||||
// fast, iterative C version
|
||||
register unsigned int lineSize;
|
||||
register unsigned char *src, *dst;
|
||||
switch(colorDepth)
|
||||
{
|
||||
case 16:
|
||||
lineSize = width<<1;
|
||||
src = ((unsigned char*)source) + lineSize + 4;
|
||||
dst = (unsigned char*)destination;
|
||||
do {
|
||||
MoveMemory( dst, src, lineSize );
|
||||
src+=lineSize;
|
||||
dst+=lineSize;
|
||||
src += 2;
|
||||
dst += (destinationPitch - lineSize);
|
||||
} while ( --height);
|
||||
break;
|
||||
case 32:
|
||||
lineSize = width<<2;
|
||||
src = ((unsigned char*)source) + lineSize + 4;
|
||||
dst = (unsigned char*)destination;
|
||||
do {
|
||||
MoveMemory( dst, src, lineSize );
|
||||
src+=lineSize;
|
||||
dst+=lineSize;
|
||||
src += 4;
|
||||
dst += (destinationPitch - lineSize);
|
||||
} while ( --height);
|
||||
break;
|
||||
}
|
||||
|
||||
// compact but slow C version
|
||||
//unsigned int nBytesPerPixel = colorDepth>>3;
|
||||
//unsigned int i, x, y, srcPitch = (width+1) * nBytesPerPixel;
|
||||
//unsigned char * src = ((unsigned char*)source)+srcPitch;
|
||||
//unsigned char * dst = (unsigned char*)destination;
|
||||
//for (y=0;y<height;y++) //Width
|
||||
//for (x=0;x<width;x++) //Height
|
||||
//for (i=0;i<nBytesPerPixel;i++) //Byte# Of Pixel
|
||||
//*(dst+i+(x*nBytesPerPixel)+(y*destinationPitch)) = *(src+i+(x*nBytesPerPixel)+(y*srcPitch));
|
||||
}
|
||||
|
|
|
@ -1,122 +0,0 @@
|
|||
// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator.
|
||||
// Copyright (C) 1999-2003 Forgotten
|
||||
// Copyright (C) 2004 Forgotten and the VBA development team
|
||||
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; either version 2, or(at your option)
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation,
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "Display.h"
|
||||
|
||||
void copyImage( void *source, void *destination, unsigned int width, unsigned int height, unsigned int destinationPitch, unsigned int colorDepth )
|
||||
{
|
||||
#ifndef C_CORE
|
||||
|
||||
// Copy the image at [source] to the locked Direct3D texture
|
||||
__asm
|
||||
{
|
||||
mov eax, width ; Initialize
|
||||
mov ebx, height ;
|
||||
mov edi, destination ;
|
||||
mov edx, destinationPitch ;
|
||||
|
||||
cmp colorDepth, 16 ; Check colorDepth==16bit
|
||||
jnz gbaOtherColor ;
|
||||
sub edx, eax ;
|
||||
sub edx, eax ;
|
||||
mov esi, source ;
|
||||
lea esi,[esi+2*eax+4] ;
|
||||
shr eax, 1 ;
|
||||
gbaLoop16bit:
|
||||
mov ecx, eax ;
|
||||
rep movsd ;
|
||||
add esi, 4 ;
|
||||
add edi, edx ;
|
||||
dec ebx ;
|
||||
jnz gbaLoop16bit ;
|
||||
jmp gbaLoopEnd ;
|
||||
gbaOtherColor:
|
||||
cmp colorDepth, 32 ; Check colorDepth==32bit
|
||||
jnz gbaOtherColor2 ;
|
||||
|
||||
lea esi, [eax*4] ;
|
||||
sub edx, esi ;
|
||||
mov esi, source ;
|
||||
lea esi, [esi+4*eax+4] ;
|
||||
gbaLoop32bit:
|
||||
mov ecx, eax ;
|
||||
rep movsd ; ECX times: Move DWORD at [ESI] to [EDI] | ESI++ EDI++
|
||||
add esi, 4 ;
|
||||
add edi, edx ;
|
||||
dec ebx ;
|
||||
jnz gbaLoop32bit ;
|
||||
jmp gbaLoopEnd ;
|
||||
gbaOtherColor2:
|
||||
lea eax, [eax+2*eax] ; Works like colorDepth==24bit
|
||||
sub edx, eax ;
|
||||
gbaLoop24bit:
|
||||
mov ecx, eax ;
|
||||
shr ecx, 2 ;
|
||||
rep movsd ;
|
||||
add edi, edx ;
|
||||
dec ebx ;
|
||||
jnz gbaLoop24bit ;
|
||||
gbaLoopEnd:
|
||||
}
|
||||
|
||||
#else // #ifndef C_CORE
|
||||
|
||||
// optimized C version
|
||||
register unsigned int lineSize;
|
||||
register unsigned char *src, *dst;
|
||||
switch(colorDepth)
|
||||
{
|
||||
case 16:
|
||||
lineSize = width<<1;
|
||||
src = ((unsigned char*)source) + lineSize + 4;
|
||||
dst = (unsigned char*)destination;
|
||||
do {
|
||||
MoveMemory( dst, src, lineSize );
|
||||
src+=lineSize;
|
||||
dst+=lineSize;
|
||||
src += 2;
|
||||
dst += (destinationPitch - lineSize);
|
||||
} while ( --height);
|
||||
break;
|
||||
case 32:
|
||||
lineSize = width<<2;
|
||||
src = ((unsigned char*)source) + lineSize + 4;
|
||||
dst = (unsigned char*)destination;
|
||||
do {
|
||||
MoveMemory( dst, src, lineSize );
|
||||
src+=lineSize;
|
||||
dst+=lineSize;
|
||||
src += 4;
|
||||
dst += (destinationPitch - lineSize);
|
||||
} while ( --height);
|
||||
break;
|
||||
}
|
||||
|
||||
// very compatible but slow C version
|
||||
//unsigned int nBytesPerPixel = colorDepth>>3;
|
||||
//unsigned int i, x, y, srcPitch = (width+1) * nBytesPerPixel;
|
||||
//unsigned char * src = ((unsigned char*)source)+srcPitch;
|
||||
//unsigned char * dst = (unsigned char*)destination;
|
||||
//for (y=0;y<height;y++) //Width
|
||||
//for (x=0;x<width;x++) //Height
|
||||
//for (i=0;i<nBytesPerPixel;i++) //Byte# Of Pixel
|
||||
//*(dst+i+(x*nBytesPerPixel)+(y*destinationPitch)) = *(src+i+(x*nBytesPerPixel)+(y*srcPitch));
|
||||
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue