Question about ddraw implemtation
Ralph Little
littlesincanada at yahoo.co.uk
Thu May 12 16:16:07 CDT 2011
Hi,
I have been looking into bug #9672 regarding a crash on startup of The Sims.
Tracing through what is happening, the problem seems to be manifesting
in the DirectDraw implementation.
The Sims calls CreateSurface() with DDSD->dwFlags & DDSD_PIXELFORMAT set
to state that a pixformat is specified in u4.ddpfPixelFormat, but no
optional flags are set in the pixelformat u4.ddpfPixelFormat.dwFlags
[DDPIXELFORMAT].
The function PixelFormat_DD2WineD3D uses this to determine the proper
WINE3D pixformat implementation.
It does not cope with what I presume is the default situation of no
flags having been set, the value being 0.
I'm thinking that if you provide 0 for u4.ddpfPixelFormat.dwFlags, you
get some basic default, but I don't know what that would be.
Certainly, The Sims seems to be providing zero for this parameter.
Any ideas what is the proper behaviour in this circumstance?
I presume the crash is the game's inability to handle the failure of the
surface create gracefully.
Here is the relevant trace fragment (with my bit of debug "pixelformat
given, flags = 0" added):
Cheers,
Ralph
=======================================
trace:ddraw:ddraw4_CreateSurface iface 0x139f0c, surface_desc 0x34f944,
surface 0x34f9c0, outer_unknown (nil).
trace:ddraw:CreateSurface ddraw 0x139f08, surface_desc 0x34f944, surface
0x34f9c0, outer_unknown (nil).
trace:ddraw:CreateSurface (0x139f08) Requesting surface desc :
trace:ddraw:DDRAW_dump_members - DDSD_CAPS : DDSCAPS_SYSTEMMEMORY
DDSCAPS_ZBUFFER
trace:ddraw:DDRAW_dump_members - DDSD_HEIGHT : 600
trace:ddraw:DDRAW_dump_members - DDSD_WIDTH : 800
trace:ddraw:DDRAW_dump_members - DDSD_PIXELFORMAT : ( )
warn:ddraw:CreateSurface pixelformat given, flags = 0
trace:ddraw:ddraw_create_surface ddraw 0x139f08, surface_desc 0x34f7ec,
surface 0x34f8b4, level 0.
trace:ddraw:ddraw_create_surface (0x139f08) Requesting surface desc :
trace:ddraw:DDRAW_dump_members - DDSD_CAPS : DDSCAPS_SYSTEMMEMORY
DDSCAPS_ZBUFFER
trace:ddraw:DDRAW_dump_members - DDSD_HEIGHT : 600
trace:ddraw:DDRAW_dump_members - DDSD_WIDTH : 800
trace:ddraw:DDRAW_dump_members - DDSD_PIXELFORMAT : ( )
trace:ddraw:PixelFormat_DD2WineD3D Convert a DirectDraw Pixelformat to a
WineD3D Pixelformat
trace:ddraw:DDRAW_dump_pixelformat ( )
err:ddraw:PixelFormat_DD2WineD3D Unknown Pixelformat! (0)
warn:ddraw:ddraw_surface_init Unsupported / unknown pixelformat.
warn:ddraw:ddraw_create_surface Failed to initialize surface, hr 0x88760091.
warn:ddraw:CreateSurface ddraw_create_surface failed, hr 0x88760091.
err:seh:raise_exception Unhandled exception code c0000005 flags 0 addr
0xfffffffff
More information about the wine-devel
mailing list