Crash in test d3d9:stateblock with warn+heap is a wine bug
Michael Karcher
wine at mkarcher.dialup.fu-berlin.de
Mon Jun 2 03:00:24 CDT 2008
Hello developers (mostly direct3d hackers),
the infamous crash in d3d9:stateblock [1] is caused by a call sequence
that is forbidden according to the DirectX SDK documentation. The
switch_rendertarget test makes a new swap chain, and sets its backbuffer
as new rendering target, and then releases the swap chain. The
backbuffer is obtained by GetBackBuffer on the new swapchain. The SDK
tells states explicitly that you have to release all surfaces obtained
by GetBackBuffer before you release the swapchain itself. [2]
In Windows, this buggy behaviour seems to work nicely (no crash in the
d3d9:stateblock test and no errors with maximum debugging settings in
the debugging d3d9 runtime), whereas on wine, at releasing the
backbuffer finally, some access to the state is made which has already
been released with the swapchain.
So, we have two options:
- Consider using backbuffer of released chains buggy:
Fix the test to not release the swapchain
Upgrade the FIXMEs in dlls/wined3d/swapchain.c, lines
95 and 104 to ERR
- Implement behaviour seemingly compatible to Windows:
Have a hidden reference counter to the swap chain or
for the contexts to prevent them from getting freed too
early.
Does anyone knows whether the test has this been written buggy on
purpose (some app does this), or it is by accident?
Regards,
Michael Karcher
[1]: Bugs 9916, 12246
[2]: http://msdn.microsoft.com/en-us/library/bb205902(VS.85).aspx
More information about the wine-devel
mailing list