Mercurial > sdl-ios-xcode
view src/video/xbios/SDL_xbios_centscreen.h @ 1542:a8bf1aa21020
Fixed bug #15
SDL_blit_A.mmx-speed.patch.txt --
Speed improvements and a bugfix for the current GCC inline mmx
asm code:
- Changed some ops and removed some resulting useless ones.
- Added some instruction parallelism (some gain)
The resulting speed on my Xeon improved upto 35% depending on
the function (measured in fps).
- Fixed a bug where BlitRGBtoRGBSurfaceAlphaMMX() was
setting the alpha component on the destination surfaces (to
opaque-alpha) even when the surface had none.
SDL_blit_A.mmx-msvc.patch.txt --
MSVC mmx intrinsics version of the same GCC asm code.
MSVC compiler tries to parallelize the code and to avoid
register stalls, but does not always do a very good job.
Per-surface blending MSVC functions run quite a bit faster
than their pure-asm counterparts (upto 55% faster for 16bit
ones), but the per-pixel blending runs somewhat slower than asm.
- BlitRGBtoRGBSurfaceAlphaMMX and BlitRGBtoRGBPixelAlphaMMX (and all
variants) can now also handle formats other than (A)RGB8888. Formats
like RGBA8888 and some quite exotic ones are allowed -- like
RAGB8888, or actually anything having channels aligned on 8bit
boundary and full 8bit alpha (for per-pixel alpha blending).
The performance cost of this change is virtually 0 for per-surface
alpha blending (no extra ops inside the loop) and a single non-MMX
op inside the loop for per-pixel blending. In testing, the per-pixel
alpha blending takes a ~2% performance hit, but it still runs much
faster than the current code in CVS. If necessary, a separate function
with this functionality can be made.
This code requires Processor Pack for VC6.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 15 Mar 2006 15:39:29 +0000 |
parents | d910939febfa |
children | 782fd950bd46 c121d94672cb a1b03ba2fcd0 |
line wrap: on
line source
/* SDL - Simple DirectMedia Layer Copyright (C) 1997-2004 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Sam Lantinga slouken@libsdl.org */ #include "SDL_config.h" /* Centscreen extension definitions Patrice Mandin */ #ifndef _SDL_xbios_centscreen_h #define _SDL_xbios_centscreen_h #include <mint/falcon.h> /* for trap_14_xxx macros */ #include "SDL_xbios.h" /*--- Defines ---*/ #ifndef C_CNTS #define C_CNTS 0x434e5453L #endif #define CSCREEN_ENERGYSTAR (1<<9) #define CSCREEN_SAVER (1<<10) #define CSCREEN_VIRTUAL (1<<11) #define CSCREEN_EXTCLOCK_CT2 (1<<12) #define CSCREEN_EXTCLOCK (1<<13) #define CSCREEN_STANDARD (1<<14) #define CSCREEN_DEFAULT (1<<15) /*--- Structures ---*/ typedef struct { unsigned short handle; /* videomode handle */ unsigned short mode; /* Falcon videomode code */ unsigned short physx; /* visible width */ unsigned short physy; /* visible height */ unsigned short plan; /* bitplanes */ unsigned short logx; /* virtual width */ unsigned short logy; /* virtual height */ unsigned short eco; /* screen saver delay */ unsigned short eco2; /* energy star screen saver delay */ unsigned short wsize; /* screen width (mm) */ unsigned short hsize; /* screen height (mm) */ unsigned short dummy[21]; unsigned char name[32]; /* videomode name */ } __attribute__((packed)) centscreen_mode_t; /*--- Functions prototypes ---*/ #define Vread(current_mode) \ (void)trap_14_wl((short)0x41,(long)(current_mode)) #define Vwrite(init_vdi, inparam, outparam) \ (long)trap_14_wwll((short)0x42,(short)(init_vdi),(long)(inparam),(long)(outparam)) #define Vattrib(inparam, outparam) \ (void)trap_14_wll((short)0x43,(long)(inparam),(long)(outparam)) #define Vcreate(inparam, outparam) \ (void)trap_14_wll((short)0x44,(long)(inparam),(long)(outparam)) #define Vdelete(handle) \ (long)trap_14_ww((short)0x45,(short)(handle)) #define Vfirst(mask,mode) \ (long)trap_14_wll((short)0x46,(long)(mask),(long)(mode)) #define Vnext(mask,mode) \ (long)trap_14_wll((short)0x47,(long)(mask),(long)(mode)) #define Vvalid(handle) \ (long)trap_14_ww((short)0x48,(short)(handle)) #define Vload() \ (long)trap_14_w((short)0x49) #define Vsave() \ (long)trap_14_w((short)0x4a) #define Vopen() \ (long)trap_14_w((short)0x4b) #define Vclose() \ (long)trap_14_w((short)0x4c) #define Vscroll(scrollmode) \ (long)trap_14_ww((short)0x4d,(short)(scrollmode)) #define Voffset() \ (long)trap_14_w((short)0x4e) #define Vseek() \ (long)trap_14_w((short)0x4f) #define Vlock(cmd) \ (long)trap_14_ww((short)0x50,(short)(cmd)) #define SetMon(montype) \ (long)trap_14_ww((short)0x51,(short)(montype)) #define MultiMon(cmd) \ (long)trap_14_ww((short)0x52,(short)(cmd)) #define VSizeComp() \ (long)trap_14_w((short)0x53) #define Vsize(mode) \ (long)trap_14_wl((short)0x54,(long)(mode)) /*--- Functions prototypes ---*/ int SDL_XBIOS_CentscreenInit(_THIS); void SDL_XBIOS_CentscreenSetmode(_THIS, int width, int height, int planes); void SDL_XBIOS_CentscreenRestore(_THIS, int prev_handle); #endif /* _SDL_xbios_centscreen_h */