Mercurial > sdl-ios-xcode
view src/timer/macos/FastTimes.h @ 1544:ab1e4c41ab71
Fixed bug #33
Mike Frysinger wrote:
> with libsdl-1.2.9, some games (like bomberclone) started
> segfaulting in Gentoo
[...snip...]
> the last change in the last hunk:
[...snip...]
> if i change the statement to read:
> (table[which].blit_features & GetBlitFeatures()) == GetBlitFeatures()
> bomberclone no longer segfaults on my box
Alex Volkov wrote:
> The test "(table[which].blit_features & GetBlitFeatures()) ==
> table[which].blit_features)" is correct, and the previous
> "(table[which].cpu_mmx == SDL_HasMMX())" was actually broken.
I think there is potentially a slightly different cause of the above problem.
During the introduction of the Altivec code, the blit_table struct field
'alpha' got changed from a straightforward enum to a bitmask, which makes
perfect sense by itself. However, now the table driven blitter selection code
in SDL_CalculateBlitN() can choose the wrong blitters when searching for a
NO_ALPHA blitter because of the following code:
int a_need = 0;
...
(a_need & table[which].alpha) == a_need &&
When searching through the normal_blit_2[] table, a SET_ALPHA blitter (like
Blit_RGB565_ARGB8888) can now be selected instead of a NO_ALPHA one, causing
alpha channel bits to appear in a non-alpha destination surface. I suppose this
could theoretically be an indirect cause of the segfault mentioned above.
I *think* this can be fixed by changing to
int a_need = NO_ALPHA;
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 15 Mar 2006 15:47:49 +0000 |
parents | d910939febfa |
children | 782fd950bd46 c121d94672cb |
line wrap: on
line source
/* File "FastTimes.h" - Original code by Matt Slot <fprefect@ambrosiasw.com> */ #include "SDL_config.h" /* Created 4/24/99 - This file is hereby placed in the public domain */ /* Updated 5/21/99 - Calibrate to VIA, add TBR support, renamed functions */ /* Updated 10/4/99 - Use AbsoluteToNanoseconds() in case Absolute = double */ /* Updated 2/15/00 - Check for native Time Manager, no need to calibrate */ /* Updated 3/21/00 - Fixed ns conversion, create 2 different scale factors */ /* Updated 5/03/00 - Added copyright and placed into PD. No code changes */ /* This file is Copyright (C) Matt Slot, 1999-2000. It is hereby placed into the public domain. The author makes no warranty as to fitness or stability */ #ifndef __FAST_TIMES_HEADER__ #define __FAST_TIMES_HEADER__ /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */ /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */ extern void FastInitialize(void); extern UInt64 FastMicroseconds(void); extern UInt64 FastMilliseconds(void); extern StringPtr FastMethod(void); /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */ /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */ #endif /* __FAST_TIMES_HEADER__ */