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