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