I have one game, that needs DX6, but lowest clone version of DX is 7. The game don't run, because in <source>dlls/ddraw/surface.c:IDirectDrawSurface7Impl_AddAttachedSurface is check the surface have z-buffer. There's a notice, that the check been added, because of information in msdn about this function. This information suggested, that DX returning error if surface don't have z-buffer. If I remove this block and " Caps.dwCaps |= DDSCAPS_BACKBUFFER;" line in IDirectDrawSurfaceImpl_Flip, the game will run and there's no graphics issue.
I think, that game written for DX7 won't give surface without z-buffer as parameter to this functions, but code, that i removed is bad for dx less 7 games. I read in winehq.org, that some games(like capitalism) have the same issue(displaying the same error message), so my hack will repair it.
Sorry for my english, I still learning.