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.

Comments (6)

  1. fergusdog says:

    Thanks for your comments, Phil

    I agree that the claim to run DX10 software on non-DX10 hardware is rubbish.

    Quite interesting to learn how the guys at Falling Leaf Systems actually go about doing this via OpenGL. I don’t expect them to ever come up with the holy grail, but these guys are sure to create some controversy and bad press for Microsoft. I agree though that the inferred end of the world scenarios are very funny (well, it makes me laugh).

    Cheers,

    Christian

  2. Aberforth says:

    why all this fuss..why can’t people buy Vista when they are investing so much money on gaming hardware 🙂

  3. I’ve blogged about this before . Now Phil Taylor , who happens to know a thing or two about DirectX

  4. Ian McPhail says:

    I installed Vista because of the upcoming DX10 patch.  Hope springs eternal, but why go to such complicated trouble for a risky outcome when in the cost structure of gaming, an OS upgrade is a small part. And I can’t even understand what they are doing anyway!!!

  5. sk121 says:

    I’m seeing a reduction in frame rates vs. increase with Acceleration/SP2 installed.  Nothing else has changed from a config perspective.  

    For example, with Sp1 if i set frame rates to unlimited, I’d get upto 40 frames/sec in certain instances even with heavy autogen and local scenery to very dense.

    With Acceleration, same settings..can barely break 20 FPS.

    This is on Vista Ultimate (SP1 beta). Latest Nvidia WHQL drivers for 8800 GTS 640MB and Core 2 Quad q6700 overclocked to 3.1 Ghz.

  6. Transient says:

    Yeah, well say what you want but the fact that people would even spend the effort to put DX10 on XP speaks volumes about Vista.

    Microsoft could have (and should have) back-ported it to XP no matter what anyone says.

    Let’s face it, has Microsoft ever had such resistance to a new OS, even when great features like DX10 are there to lure people in? Yes, I believe they have — it was called Windows ME.

    Sure, there may be licensing and development costs associated with putting DX10 on XP, but since when has that stopped anything?

    I can guarantee Microsoft will never see a dime of my money go towards Vista and I’m not even the crazy zealot you probably think I am. I’ve always been a big fan, but this DX10 only on Vista garbage is going to hurt developers and hardware manufacturers in the end.

    Honestly, I wish a major player like ATI or Nvidia would have just grown some balls and refused to support DX10 without it also being backported to XP. They’d probably be surprised how many friends they made in the process.