Game Development Stack Exchange is a question and answer site for professional and independent game developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I had a feeling that it would be easier to tackle this problem before I got too deep into development (unless, of course if that's a bad idea/the hard way, please inform me...). I'm creating my game to be run ideally on DirectX 11, however, I want to offer it on DirectX 10, and I'm unsure if it is worth offering it for DirectX 9 for XP users. I'm not too sure how this fallback even works, as I can't find many articles on the internet. If someone could give me an in-depth article, that would be great.

I've read a little about how since DirectX11 is completely absent on XP, it is hard to even check for support. Someone mentioned having multiple applications for each version, is this a good idea?

Thanks to anyone who can point me in the right direction here.

share|improve this question
What is your target audience? Hardcore shooter v.s. casual game can make a world of difference with regards to the 'should I support DX9' decision. – Paul-Jan Apr 7 '12 at 7:27
Second, there are two reasons for getting a big advantage out of DX11: (I) easier coding because you are in the learning phase and/or(II) You are using DX11 specific GPU features. In case (I), targeting multiple DX versions wil be hard. In case (II), targeting multiple DX versions will be expensive (in terms of hours invested in creating alternative rendering techniques for fallback). – Paul-Jan Apr 7 '12 at 7:29
While it is not an 100% answer you can create different techniques in HLSL shaders that target different Shader Models, DirectX9 would be SM3, Dx10 SM4, Dx11 SM5. See also :… and – Roy T. Apr 7 '12 at 7:53
Just to clarify: What you should really be concerned about is Dx9 vs Dx11. Dx10 is pretty much deprecated with all its features and its basic design having been absorbed by Dx11. So as the others have pointed out: It's Dx9 for WinXP/XBox360 and Dx11 for pretty much everything else. – Koarl Apr 7 '12 at 11:06
Well, let me clear some stuff up. My game is a sandbox game, but it does have a lot of FPS in it, and also a sort of creepy environment (so it's not for the kids playing on their parents old 1998 Dell). This is why I was on the fence about DX9, because most gamers use Vista or Windows 7. My game has no plan of ever being on the Xbox 360, because it's a pain, I don't like the Xbox that much, and the mechanics would never transfer. So that's also out of the question. Thanks for clearing a lot of this up though, it will help me a lot to decide. – smoth190 Apr 9 '12 at 21:16

You can target any hardware you like with the D3D11_FEATURE_LEVEL enum. This allows you to use the Direct3D11 API to target D3D10 and D3D9 hardware, with some limitations, which could be significantly easier than coding a separate D3D10 and D3D9 renderer. However, you must code an explicit Direct3D9 renderer to target Windows XP.

share|improve this answer
I was just worried the feature level aspect would not work for shaders, and I assume that is still true. I was just about to add the 2D aspect of my game (UI, etc.) and I needed to add a DirectX10 device anyway. I didn't want to have two DX10 devices if the user was using DX10, so I wanted to know if I needed to combine them. If the feature level will let DX10 hardware run with a DX11 device, then I do not need to combine them. – smoth190 Apr 9 '12 at 21:12
@smoth190: If the shader does not use D3D11-specific features, then as far as I know, you can create it using a lower feature set and then run it on the downlevel devices. – DeadMG Apr 9 '12 at 21:58

Well if I'm not mistaken, you must directly target each version mainly due to the differences between each version, especially between dx9 and dx10/11. Also, at this point I'd say it's safe to move to DX 11. By the way, DX 9 is Windows XP, DX 10 is Vista, and DX 11 is Vista SP1, Win 7, and Win 8.

share|improve this answer
I was planning on developing the game for DX11/10(.1) and later developing a second game for DX9, because they are so different. Of course, this second version depends on the games success-fullness, motivation, and overall necessity. – smoth190 Apr 9 '12 at 21:10

Unless this is a commercial project ignore XP/D3D9 and just write for D3D11. And ignore any device below D3D_FEATURE_LEVEL_10_0 because there are very few D3D11 machines with only a D3D9 video card. Even if it is a commercial project you should only target D3D9/XP/older hardware if you need large numbers of buyers to make money - and that depends on the game. The Steam and Unity web player have a lot of information that can help you make that decision.

Even if you do decide that D3D11 is the only API you need to target right now, you may want to leave the door open to other APIs in future. That might lead you to think that abstracting the D3D11 API behind your own set of interfaces and objects would be a good idea. Well, maybe. Doing so has a cost and getting the abstraction right without knowing much about the other APIs is hard.

If you do go this way aim for a high level abstraction (e.g. it should deal with things like models and instances) and NOT just a thin layer over D3D11 (which would be things like buffers and draw calls). You want to leave the implementation free to call the target API efficiently instead of trying to emulate some other API.

share|improve this answer
Okay, well my game is indie, and so far, it has been 100% free to develop, so money is no issue. I just wanted to develop a game that would include as many people as possible. From just hearing my friends talk and playing other DirectX 11 games, DX11 hardware is still new, and a lot of people have older hardware. Luckily, my game architecture is very object oriented, and it will be very easy to add older APIs if necessary. – smoth190 Apr 9 '12 at 21:09

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.