Crash when DirectX enabled

I had an SDL based application tested by a commercial testing service. It
ran fine on a variety of systems but on one system it crashed at startup
with the error: “invalid page fault in module at 0000:6aa01eef”.
The specifications of the system are:

  • : 43 / Win 95 B (OSR2,OSR2.1) Dutch
    ESTATE CLONE PII233 - Intel Pentium II 233 - 64MB
    3DFX INTERACTIVE VOODOO3 2000 - 16 MB 3dfx16v3.drv 4.11.01.1222 (Eng)
    CREATIVE SOUNDBLASTER VIBRA 16 PNP sb16.vxd 4.38.00.0003 (Eng)
    TEAC CD532E - 32 speed
    On a similar system with specifiations:
  • : 45 / Win 95 B (OSR2,OSR2.1) Dutch
    SIEMENS NIXDORF PRO C6 - Intel Pentium II 300 - 32MB
    MATROX MILLENIUM G100 AGP - 8 MB mgapdx64.drv 4.10.01.3820
    CRYSTAL PNP CODEC cwaudix.vxd 4.05.2700
    NEC CDR 1900A - 32 speed
    the application ran fine. Both systems are clean installs of the OS.

I resubmitted the application with sdl.dll replaced with a dll with DirectX
disabled. This time there were no problems.

The fact that the original app crashed with the error mentioned above,
bypassing the “parachute”, combined with the fact that the crash only
happens when DirectX is enabled, makes me believe that the crash occurs in a
DirectX driver. I suspect that this is caused by a bad driver. However it
would be very useful if SDL could detect this somehow and would fall back to
WinDib.

Unfortunately the testing service cannot provide more details and I don’t
have access to the hardware on which the crash occurred.

Is this a known problem?
Does anyone know what to do about this?

Huib-Jan

I had an SDL based application tested by a commercial testing service. It
ran fine on a variety of systems but on one system it crashed at startup
with the error: “invalid page fault in module at 0000:6aa01eef”.

Are you using SDL_HWSURFACE? If so, try changing it to SDL_SWSURFACE.
If that works, you’re probably not locking the surface before writing to it.

You might check to see if the crash happens in windowed mode or fullscreen
mode, and whether it happens when sound is enabled.

See ya,
-Sam Lantinga, Software Engineer, Blizzard Entertainment

Sam,

I could be mistaken, but I believe the crash is due to DirectX not being
installed (by default) on Windows 95 A&B systems… It didn’t ship with
windows until Win98 I believe… I did similar testing on our products
when I was at Reflexive. I like the idea of falling back to DIB
surfaces, but even then, it’s probably a good idea to pop up a dialog
indicating that the application will run best when DirectX is installed
(if SDL can’t find it).

Just my 2 cents,

-LorenOn Wed, 2002-08-21 at 12:18, Sam Lantinga wrote:

I had an SDL based application tested by a commercial testing service. It
ran fine on a variety of systems but on one system it crashed at startup
with the error: “invalid page fault in module at 0000:6aa01eef”.

Are you using SDL_HWSURFACE? If so, try changing it to SDL_SWSURFACE.
If that works, you’re probably not locking the surface before writing to it.

You might check to see if the crash happens in windowed mode or fullscreen
mode, and whether it happens when sound is enabled.

See ya,
-Sam Lantinga, Software Engineer, Blizzard Entertainment


SDL mailing list
SDL at libsdl.org
http://www.libsdl.org/mailman/listinfo/sdl

I had an SDL based application tested by a commercial testing service.
It

ran fine on a variety of systems but on one system it crashed at startup
with the error: “invalid page fault in module at
0000:6aa01eef”.

Are you using SDL_HWSURFACE? If so, try changing it to SDL_SWSURFACE.
If that works, you’re probably not locking the surface before writing to
it.

I am not using SDL_HWSURFACE.

You might check to see if the crash happens in windowed mode or fullscreen
mode, and whether it happens when sound is enabled.

The crash happened in windowed mode and it still happened with no audio
initialized.

Huib-Jan

Sam,

I could be mistaken, but I believe the crash is due to DirectX not being
installed (by default) on Windows 95 A&B systems… It didn’t ship with
windows until Win98 I believe… I did similar testing on our products
when I was at Reflexive. I like the idea of falling back to DIB
surfaces, but even then, it’s probably a good idea to pop up a dialog
indicating that the application will run best when DirectX is installed
(if SDL can’t find it).

As far as I can deduce from the source, the fall back mechanism already
exists. But apparently SDL detects DirectX on this particular machine, but
either it is not the right version or it is just buggy.

Huib-Jan

The crash you describe is probably a bug in the driver rather than a
bug in SDL. It’s almost always the case that the bug will be fixed by
upgrading the drivers, unless it’s so new that the board manufacturer
doesn’t know about it yet.

There have been so many buggy drivers out there that I’d suggest that
it’s probably impossible to write functional, competitive game code
that never crashes some version of some driver. ESPECIALLY under Win95.

Think of it this way – as far as I know (and I could be wrong), the
Voodoo 3 was never a standard video card from a computer vendor. I
believe that if you wanted one, you had to go out and buy it as an
aftermarket card. I doubt there are many people who cared enough to
upgrade a video card to a Voodoo 3 but who are still running Win95.

If you had the machine handy you might be able to code around it, but
if this is the biggest compatibility problem you have, record it in
your bug database, count your blessings and ship the sucker.

 Kent

Wednesday, August 21, 2002, 4:38:43 PM, sdl-admin wrote:>> Sam,

I could be mistaken, but I believe the crash is due to DirectX not being
installed (by default) on Windows 95 A&B systems… It didn’t ship with
windows until Win98 I believe… I did similar testing on our products
when I was at Reflexive. I like the idea of falling back to DIB
surfaces, but even then, it’s probably a good idea to pop up a dialog
indicating that the application will run best when DirectX is installed
(if SDL can’t find it).

As far as I can deduce from the source, the fall back mechanism already
exists. But apparently SDL detects DirectX on this particular machine, but
either it is not the right version or it is just buggy.

Huib-Jan


SDL mailing list
SDL at libsdl.org
http://www.libsdl.org/mailman/listinfo/sdl


Kent Quirk, CTO, CogniToy
@Kent_Quirk
http://www.cognitoy.com

-----Oorspronkelijk bericht-----
Van: hj [mailto:hj at imbens.nl]
Verzonden: Wednesday, August 21, 2002 10:39 PM
Aan: sdl
Onderwerp: Re: [SDL] crash when DirectX enabled

– SNIP –

As far as I can deduce from the source, the fall back mechanism already
exists. But apparently SDL detects DirectX on this particular machine,
but
either it is not the right version or it is just buggy.

Or it’s possible that your SDL.dll is not the correct one. I saw this
problem
with machines using my own build SDL.dll (which ofcourse worked for me
;).

So, be sure to get the SDL runtime for WIN32 and try again. This solved
many
issues for me. And make sure you don’t strip the SDL.dll, it can produce
very
strange results. If you want to compress the SDL.dll file, use UPX
(available
at http://upx.sourceforge.net) since it reduces size about 80% :slight_smile:

In other cases, it’s a defect DirectX runtime installation (I’ve seen
this a
lot on Win9x systems) and reinstalling DirectX will surely work in most
cases.

Huib-Jan

Regards,

Niels Wagenaar_______________________________________________
SDL mailing list
SDL at libsdl.org
http://www.libsdl.org/mailman/listinfo/sdl

nwagenaar at digitaldynamics.nl wrote:

-----Oorspronkelijk bericht-----
Van: hj [mailto:hj at imbens.nl]
Verzonden: Wednesday, August 21, 2002 10:39 PM
Aan: sdl
Onderwerp: Re: [SDL] crash when DirectX enabled

– SNIP -
[snip]

Or it’s possible that your SDL.dll is not the correct one. I saw this
problem
with machines using my own build SDL.dll (which ofcourse worked for me
;).

you can add this in a first step to check if lib == dll

SDL_version compiled;

SDL_VERSION(&compiled);

printf(" SDL Compiled version : %d.%d.%d\n",
compiled.major, compiled.minor, compiled.patch);
printf(" SDL Linked version: %d.%d.%d\n",
SDL_Linked_Version()->major,
SDL_Linked_Version()->minor,
SDL_Linked_Version()->patch);__________________________