If the WPF render thread is doing software rendering, D3DImage will not show up. I don't think we specifically called this out in the documentation so it can come as a surprise when you first encounter it. Off the top of my head, here are times when the render thread is in software:
- RenderCapability.Tier == 0
- You set HwndTarget.RenderMode = SoftwareOnly
- A video card driver before November 2004 (date subject to change in the future)
- Remote desktop
- The window size is larger than the max texture size of the video card (rare)
All of these cases should be covered by simply checking #1 except for #2. You might be surprised by #4, but in 3.5 SP1 we had to change how remoting works.
You're probably thinking that I left out RenderTargetBitmap and printing since they both use software rendering, but they happen on the UI thread! D3DImage will show up because they call CopyBackBuffer().
P.S. Don't forget to read the perf notes when using D3DImage