Mercurial > sdl-ios-xcode
view src/main/macosx/exports/SDL.x @ 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 | 84cecd0b64b4 |
children |
line wrap: on
line source
_SDL_Init _SDL_InitSubSystem _SDL_QuitSubSystem _SDL_WasInit _SDL_Quit _SDL_GetAppState _SDL_AudioInit _SDL_AudioQuit _SDL_AudioDriverName _SDL_OpenAudio _SDL_GetAudioStatus _SDL_PauseAudio _SDL_LoadWAV_RW _SDL_FreeWAV _SDL_BuildAudioCVT _SDL_ConvertAudio _SDL_MixAudio _SDL_LockAudio _SDL_UnlockAudio _SDL_CloseAudio _SDL_CDNumDrives _SDL_CDName _SDL_CDOpen _SDL_CDStatus _SDL_CDPlayTracks _SDL_CDPlay _SDL_CDPause _SDL_CDResume _SDL_CDStop _SDL_CDEject _SDL_CDClose _SDL_HasRDTSC _SDL_HasMMX _SDL_HasMMXExt _SDL_Has3DNow _SDL_Has3DNowExt _SDL_HasSSE _SDL_HasSSE2 _SDL_HasAltiVec _SDL_SetError _SDL_GetError _SDL_ClearError _SDL_Error _SDL_PumpEvents _SDL_PeepEvents _SDL_PollEvent _SDL_WaitEvent _SDL_PushEvent _SDL_SetEventFilter _SDL_GetEventFilter _SDL_EventState _SDL_NumJoysticks _SDL_JoystickName _SDL_JoystickOpen _SDL_JoystickOpened _SDL_JoystickIndex _SDL_JoystickNumAxes _SDL_JoystickNumBalls _SDL_JoystickNumHats _SDL_JoystickNumButtons _SDL_JoystickUpdate _SDL_JoystickEventState _SDL_JoystickGetAxis _SDL_JoystickGetHat _SDL_JoystickGetBall _SDL_JoystickGetButton _SDL_JoystickClose _SDL_EnableUNICODE _SDL_EnableKeyRepeat _SDL_GetKeyRepeat _SDL_GetKeyState _SDL_GetModState _SDL_SetModState _SDL_GetKeyName _SDL_LoadObject _SDL_LoadFunction _SDL_UnloadObject _SDL_GetMouseState _SDL_GetRelativeMouseState _SDL_WarpMouse _SDL_CreateCursor _SDL_SetCursor _SDL_GetCursor _SDL_FreeCursor _SDL_ShowCursor _SDL_CreateMutex _SDL_mutexP _SDL_mutexV _SDL_DestroyMutex _SDL_CreateSemaphore _SDL_DestroySemaphore _SDL_SemWait _SDL_SemTryWait _SDL_SemWaitTimeout _SDL_SemPost _SDL_SemValue _SDL_CreateCond _SDL_DestroyCond _SDL_CondSignal _SDL_CondBroadcast _SDL_CondWait _SDL_CondWaitTimeout _SDL_RWFromFile _SDL_RWFromFP _SDL_RWFromMem _SDL_RWFromConstMem _SDL_AllocRW _SDL_FreeRW _SDL_ReadLE16 _SDL_ReadBE16 _SDL_ReadLE32 _SDL_ReadBE32 _SDL_ReadLE64 _SDL_ReadBE64 _SDL_WriteLE16 _SDL_WriteBE16 _SDL_WriteLE32 _SDL_WriteBE32 _SDL_WriteLE64 _SDL_WriteBE64 _SDL_GetWMInfo _SDL_CreateThread _SDL_CreateThread _SDL_ThreadID _SDL_GetThreadID _SDL_WaitThread _SDL_KillThread _SDL_GetTicks _SDL_Delay _SDL_SetTimer _SDL_AddTimer _SDL_RemoveTimer _SDL_Linked_Version _SDL_VideoInit _SDL_VideoQuit _SDL_VideoDriverName _SDL_GetVideoSurface _SDL_GetVideoInfo _SDL_VideoModeOK _SDL_ListModes _SDL_SetVideoMode _SDL_UpdateRects _SDL_UpdateRect _SDL_Flip _SDL_SetGamma _SDL_SetGammaRamp _SDL_GetGammaRamp _SDL_SetColors _SDL_SetPalette _SDL_MapRGB _SDL_MapRGBA _SDL_GetRGB _SDL_GetRGBA _SDL_CreateRGBSurface _SDL_CreateRGBSurfaceFrom _SDL_FreeSurface _SDL_LockSurface _SDL_UnlockSurface _SDL_LoadBMP_RW _SDL_SaveBMP_RW _SDL_SetColorKey _SDL_SetAlpha _SDL_SetClipRect _SDL_GetClipRect _SDL_ConvertSurface _SDL_UpperBlit _SDL_LowerBlit _SDL_FillRect _SDL_DisplayFormat _SDL_DisplayFormatAlpha _SDL_CreateYUVOverlay _SDL_LockYUVOverlay _SDL_UnlockYUVOverlay _SDL_DisplayYUVOverlay _SDL_FreeYUVOverlay _SDL_GL_LoadLibrary _SDL_GL_GetProcAddress _SDL_GL_SetAttribute _SDL_GL_GetAttribute _SDL_GL_SwapBuffers _SDL_GL_UpdateRects _SDL_GL_Lock _SDL_GL_Unlock _SDL_WM_SetCaption _SDL_WM_GetCaption _SDL_WM_SetIcon _SDL_WM_IconifyWindow _SDL_WM_ToggleFullScreen _SDL_WM_GrabInput _SDL_SoftStretch _SDL_strrev _SDL_strupr _SDL_strlwr _SDL_ltoa _SDL_ultoa _SDL_lltoa _SDL_ulltoa _SDL_iconv _SDL_iconv_string .objc_class_name_SDL_QuartzWindow .objc_class_name_SDL_QuartzWindowDelegate