


This is because, as you alluded to, it's possible for cards to lie or for there to be driver bugs that effectively render particular hardware/driver combinations "non functional" (or at least broken in a fashion you'd want to work around). You'll note that I said "should be guaranteed" in a few places. Below the 10_0 level you have some odd 10Level9 differences to take into account - the upshot for you is that you have to use odd shader model designations like vs_4_0_level_9_1 in some (perhaps all, we're getting into territory I haven't explored much in practice) scenarios. If you're using the 10_0 feature level or greater, you should be guaranteed SM4. For D3D11 (which I'd recommend over 10, since it should be the case that you can use 11 if you can use 10) device capabilities are categorized into feature levels. All four are described on the linked documentation page.įor D3D10 you should be guaranteed SM4. Of interest to you concerning this problem will the fields in the resulting structure called VertexShaderVersion and PixelShaderVersion as well as possibly MaxVertexShader30InstructionSlots and MaxPixelShader30InstructionSlots.

This will give you a structure containing a lot of interesting information about what the hardware supports. If you are using D3D9, you can query for device capabilities reported by your card using the IDirect3D9::GetDeviceCaps method.
