I would like to find out from .NET code whether DirectX 10 is supported on the machine, preferably without using managed DirectX or XNA assemblies.
Thank you in adva
To check DirectX10, we're actually calling the D3DX10CheckVersion function via platform invoke.
This requires presence of the D3DX10 DLLs in the C:\Windows\System32 or C:\Windows\SysWow64 folders (platform dependent). If these are not present, then you need to install the DirectX10 Runtime on the target PC.
The actual support DirectX version / DirectX SDK version can be determined from the parameters to the P/Invoke call.
Here is the P/Invoke call:
// DX10 Supported Function
// See D3DX10CheckVersion http://msdn.microsoft.com/en-us/library/windows/desktop/bb172639(v=vs.85).aspx
[DllImport("d3dx10_43.dll", EntryPoint = "D3DX10CheckVersion", CallingConvention = CallingConvention.StdCall, SetLastError = false)]
private static extern HResult D3DX10CheckVersion(
uint D3DSdkVersion,
uint D3DX10SdkVersion);
public enum HResult : int
{
S_OK = 0x0000,
S_FALSE = 0x0001,
E_NOTIMPL = 0x0002,
E_INVALIDARG = 0x0003,
E_FAIL = 0x0004,
};
bool SupportsDirectX10()
{
// Values taken from d3d10.h to check DirectX version
const uint D3D10_SDK_VERSION = 29;
const uint D3DX10_SDK_VERSION = 43;
// Checks DirectX 10 GPU compatibility with the DirectX10 runtime
// Assumes D3DX10 DLLs present in C:\Windows\System32 or
// C:\Windows\SysWow64 folders (platform dependent)
HResult hResult = D3DX10CheckVersion(D3D10_SDK_VERSION, D3DX10_SDK_VERSION);
return hResult == HResult.S_OK;
}