J'ai besoin d'une double précision pour certains calculs GPGPU utilisant DirectCompute. Quand je fais tout flotter, le shader compile et fonctionne très bien. Cependant, quand j'essaye d'employer des doubles n'importe où dans mon shader, il compilera, mais appelant ID3D11Device::CreateComputeShader()
à l'exécution échoue avec E_INVALIDARG
. Le code du côté C++ est exactement le même, attention, je viens de changer quelques variables dans le shader pour doubler. Quand j'appelle ID3D11Device::CheckFeatureSupport()
avec D3D11_FEATURE_DOUBLES
, il signale que les doubles sont supportés sur mon adaptateur, qui est un AMD Radeon R9 270x. D'après quelques recherches sur Google, les cartes AMD sont très efficaces pour les calculs en double précision - IE, ma carte peut utiliser des doubles, mais DirectX ne semble pas vouloir me laisser faire ça. Je pensais que peut-être DirectCompute n'avait pas cette capacité (ce qui serait bizarre, puisque beaucoup de processus scientifiques GPGPU ont besoin de doubles), alors j'ai essayé d'utiliser un pixel shader à la place. La même chose arrive.CreateComputeShader renvoie E_INVALIDARG lors de l'utilisation de doubles
Est-ce un bug de pilote, ou y a-t-il quelque chose qui me manque?
EDIT: Je viens de chercher le dernier pilote Catalyst, et apparemment je suis derrière quelques versions. C'est intéressant, étant donné que je suis allé au centre de contrôle et vérifié les mises à jour plusieurs fois récemment. Je vais mettre à jour et voir ce qui se passe.
EDIT2: La mise à jour n'a eu aucun effet. Soit je fais quelque chose de mal, ou DirectX a un bug de toutes sortes.
Quel niveau caractéristique avez-vous créé votre appareil à? –
@AdamMiles Je lui ai passé nullptr pour les niveaux de fonctionnalités afin qu'il soit par défaut à tout ce qui est disponible – NmdMystery
@AdamMiles Cependant, il doit utiliser la version 11.0, car 11.1 ne fonctionne pas sur mon environnement. – NmdMystery