General Problem Description
We have artifacts on second monitor when working with two monitors in multihead mode, locked with VSYNC. The artifact looks like an horizontal bar that moves up from the bottom of the second monitor, sometimes goes all the way to the top of monitor, sometimes dissapears in the middle.
Looks like some kind of sychronization problem. Doesn't exist on the back buffer of the second monitor (checked with various kinds of captures, inside and outside of our application). I attach a video of the problem.
We use DirectX 9.0c. Tested with Radeon x1550 and the latest driver in Windows XP SP2.
We create one DIRECT3DDEVICE9 with D3DCREATE_ADAPTERGROUP_DEVICE to guide simultanously two monitors full screen with the same card (Dual View mode). We have used exact microsoft help guidelines to implemement it.
Exact problem behavior
All work OK when presentation interval is D3DPRESENT_INTERVAL_IMMEDIATE.
The problem exists when we choose D3DPRESENT_INTERVAL_DEFAULT to lock FPS with vertical refresh (We have certain needs that force us to do so).
The problem exists even in case we use the same resolution on the two monitors (always in Dual View) but becomes worse when the resolutions are different.
Activation/deactivation of hw vertex processing doesn't affect it.
Set/unset of D3DCREATE_MULTITHREADED also doesn't affect it.
Increasing refresh rate of monitors to 75Hz (from 60Hz) seems to make the problem more frequent.
The same code/executable works OK in a test machine with Windows 7 Ultimate (machine had DX 11 runtime installed by default).
We use the same OS/cards for years in production environment without problems using horizontal span. We used dual view mode in the past with Intel onboard graphics cards without problems.
This time though we need to use different resolutions in the two monitors, so there is no other way than dual view.
Looking forward for some help because we have an ongoing project that depends on this and is very critical.
Thank you very much in advance,
Problem solved by setting D3DSWAPEFFECT_COPY instead of D3DSWAPEFFECT_DISCARD in D3DPRESENT_PARAMETERS.SwapEffect.