I'd need to know if the video chipset Direct3D runs on is from Nvidia, AMD or Intel.

Is there a way to do that?

  • \$\begingroup\$ This question scares me... are you trying to do some sort of branching on this, or even worse, a card database? \$\endgroup\$ Jul 4 '12 at 12:04
  • \$\begingroup\$ @Lars I'm using some vendor-specific extensions so I might use this as a first guess of which one to try. So yes, branching, what's wrong with this? \$\endgroup\$ Jul 4 '12 at 12:12
  • \$\begingroup\$ Fair enough. Usually when this kind of question appears, it's someone that hardcodes a mapping from name to capabilities that is instantly obsolete as soon as it's compiled. Such lists were the bane of software like Cedega, which exposes a fairly different set of capabilities. \$\endgroup\$ Jul 4 '12 at 14:54

Ha, found it with more googling.

D3D9: call IDirect3D9::GetAdapterIdentifier and check the VendorId of the provided D3DADAPTER_IDENTIFIER9 structure.

D3D11: call IDXGIAdapter::GetDesc and check the VendorId of the provided DXGI_ADAPTER_DESC structure.

Video chipsets vendor IDs, retrieved from this list:

  • Nvidia: 0x10DE
  • AMD: 0x1002, 0x1022
  • Intel: 0x163C, 0x8086, 0x8087

In bold: the IDs mentioned in CardCaps.pdf (provided with the DirectX SDK), that add up with what Direct3D returns on actual hardware.

  • 2
    \$\begingroup\$ Hopefully you'll save some poor sap in the future some Googling. ;) \$\endgroup\$
    – knight666
    Jul 4 '12 at 9:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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