Le truc à la con du jour : Enumérer les cartes DirectX11 présentes sur le système

26. février 2011

Problème du jour : Si l’on part du code d’énumérations des cartes présentes sur un système, on peut ne pas voir les cartes DirectX11.

Le code (sous SlimDX) standard pour énumérer les cartes présentes est le suivant:

FeatureLevel[] levels = {
                            FeatureLevel.Level_11_0
                        };
// Creation du device Factory factory = new Factory(); for (int index = 0; index < factory.GetAdapterCount(); index++) { Adapter adapter = factory.GetAdapter(index); try { device11 = new Device(adapter, DeviceCreationFlags.None, levels); break; } catch { ... } }

Le fonctionnement est donc:

  • Définir notre FeatureLevel (ici c’est bien du DirectX11)
  • Créer une Factory pour accéder à la liste des adapters (les cartes graphiques)
  • Tenter de construire notre device sur l’adapter avec le FeatureLevel attendu

 

Or si on se contente de faire cela, nous n’accèderons pas à notre carte DirectX11. En effet ce code ne marche que pour DirectX9 et 10.

Pour DirectX11 (et même si je trouve ça regrettable), il faut changer la classe de notre Factory pour que cette dernière reconnaisse les cartes DX11:

Factory1 factory = new Factory1();

C’est aussi bête que cela…

DirectX, .Net