DX10 on XP: Round 2

Today on AVSim.com, in this thread http://forums.avsim.net/dcboard.php?az=show_mesg&forum=121&topic_id=406460&mesg_id=406460&page= the “DX10 on XP” issue came up again, with renewed discussion about what FallingLeafSystems is doing.

I covered this in Feb 2007 in my blog at http://blogs.msdn.com/ptaylor/archive/2007/02/14/why-dx10-wasnt-created-on-xp-and-why-it-isnt-in-xp.aspx, and before me David Weller, DirectX Community Lead discussed this on his blog at http://letskilldave.com/archive/2006/10/17/DirectX-10-for-Windows-XP_3F00_--Repeat-after-me_3A00_-No.-No.-No_2E00_.aspx back in October 2006.

However, that seems to not have been enough debunking. So I took a look at this again and investigated in some detail what is actually available in the FallingLeafSystems release, and what the limits of the possible are on XP.

FallingLeafSystems is claiming to enable DX10 on XP, and further, to quote the AlkyProject blog at http://alkyproject.blogspot.com/2007/04/finally-making-use-of-this-blog-i.html “No longer will you have to upgrade your OS and video card(s) to play the latest games”.

So they are claiming to make DX10 work without DX10 hardware.

Holy schmoly Batman, can they make that work?

Not at all.

And I will show why with just a few off-the-cuff comments based on reading their web site and readme documentation, and reading a few other sites and documents – no detailed code analysis is required.

The FallingLeafSystems approach is to write a wrapper around the OpenGL extensions for DX10 class hardware that are already available on XP. And to claim this can work without proper hardware.

That by itself means this isn’t some monumental hack, but merely some clever coding ala the Quake on D3D demo we did years ago.

No reverse engineering of DX10 is involved. What is involved is eyeballing the D3D10 API and mapping those calls to their OGL equivalent. For reference, an intern wrote the QuakeD3D wrapper.

On to details.

The coverage of D3DX is limited to 1 version, so only games compiled against D3DX10_33.DLL have a chance of working. There are at least 15 versions of that DLL, and if you don’t have the full set, then some games just plain wont load at all with a "DLL not found" error. That is a wonderful user experience isn’t it? Not!

The coverage of the DX SDK is weak. Right now the readme recommends running 1 tutorial out of how many? And admits there are lots of issues with the tutorials, much less the samples. That indicates how much work is left to complete this, but more on that later.

Then there is the wrapper performance cost and wrapper functionality issue raised by MauiHawk in the AVSim thread.

So let us take a moment to consider those two issues.

Once someone benches this, we will see what the basic performance cost is, ignoring new features. Last I looked, OpenGL required an extra copy of textures in memory, so there used to be some inefficiencies in the OGL stack as well. And just the extra call, which flushes the I-cache on the CPU, exacts some cost.

So this is sure to exact some performance cost in the best case, where DX10 hardware is available and thus the features map 1:1.

What about where there is not DX10-class hardware? How does that work?

Not so well. And let me show why.

The blog posts mentions running Geometry Shader code on the CPU if there is no GS unit. That is going to be a dog, and is contrary to the purpose and existence of the GS unit.. One key purpose of the GS unit is to be able to emit vertices on the far side of the bus, to enhance geometry without CPU intervention. Bye-bye to that feature. Another key feature of the GS unit is to be able to generate all 6 faces of a CubeMap texture ( used for perfect reflections amongst other effects ) in 1 pass instead of the 6 it takes today. Bye-Bye to that feature.

One poster on the FallingLeafSystems forums notes there is no shader support in the initial release. If that is true the initial code value is low and the remaining work is large. How does one take unlimited shaders and 16x4k constant buffers and map those to 1k shaders ( SM 3.0, SM 2.0 is even more restrictive and that’s all the 1st generation of DX9 cards can do ) and

256 constants? Inquiring minds want to know. http://static.tigerdirect.com/pdf/NVIDIA_Microsoft_DirectX-10_Technical_Brief.pdf talks to the vastly expanded resource limits for DX10, and

http://www.behardware.com/articles/631-2/directx-10-and-gpus.html has a great table that shows some of the resource limit changes I am talking to; for those of you who want to see how challenging this will be.

Another key feature of DX10 hw is that FP16 floating point formats are filterable. Not having filtering on HDR textures meant huge artifact problems in DX9. So it’s unclear how that feature maps to DX9 hw without an obvious quality disadvantage independent of the obvious performance issues.

I haven’t exhausted the DX10 feature list yet, just picked off three features off the top of my head. So you had better have DX10 class hw or else this wrapper won’t run very well at all.

I can keep going.

A couple key parts of the Vista kernel-WDDM driver work are GPU interruptability and GPU memory management. Yes, in Vista the OS is managing the GPU to make applications play nice, as opposed to the DX9 style "last application in owns the card" style. And 10.1 and 10.2 will expand on those capabilities with more fine-grained interruptability and GPU memory paging behaviors. It seems pretty clear from this article on the OpenGL.org site at http://www.opengl.org/pipeline/article/vol003_9/ that without WDDM you don’t get those features, which is what I have been saying all along about DX10 and Vista. Nice to see it confirmed by the OpenGL people J.

And there are others questioning this work, even on FallingLeafSystems's own forums, see http://www.fallingleafsystems.com/forum/index.php?showtopic=53 and these include WINE developers who are some of the most knowledgeable about cross system emulation.

So there is a lot of work left to do before this is anything like ready for prime time. And it should be pretty clear that without DX10 class hardware this approach is doomed to failure. So that limits it out of the box.

This quick analysis partly validates what I said back in Feb 2007. The OpenGL.org page validates more of what I said.

Clever hack, maybe. Godsend for XP, unlikely due to so many compromises. End of the world and time to sell MS stock, not at all.

I still stand by the fact that full DX10 support requires Vista. There is no such thing as a free lunch.