We are struggling with the following problem on laptops with switchable graphics (AMD Radeon 7670M + Intel 4000) in our WPF application:
The D3DImage we use to display some video only shows a black frame. This only happens when the discrete graphics (AMD) is active for the application (mode set to high performance). With the Intel graphics active (mode set to power saving) it works. It looks like we are not alone with this issue. A search on google revealed the following posts in the AMD forums:
- URGENT: switchable graphics and resources sharing
- D3DImage do not show up when configure the switable graphics to Radeon Adapter
I have found a workaround using D3DImage.CopyBackBuffer - it looks like the backbuffer does indeed contain the right frame - so I will try to display that instead.
But in order to only apply this workaround when it is necessary, this brings me to the subject of this question: How do I find out if the system actually has switchable graphics?
I suppose there might be some ways using WMI or looking through the registry, but I would be so glad if someone could point me in the right direction or might even have an example how to do so.
Update:
I have tried EnumDisplayDevices and System.Management.ManagementObjectSearcher. The first not returning all devices while the latter does. But perhaps there is still a better way?