Partager via


Nuanceurs de calcul sur le matériel de niveau inférieur

Direct3D 11 offre la possibilité d’utiliser des nuanceurs de calcul qui fonctionnent sur la plupart du matériel Direct3D 10.x, avec certaines limitations de fonctionnement. La technologie de nuanceur de calcul est également connue sous le nom de technologie DirectCompute. Cette rubrique explique comment utiliser des nuanceurs de calcul dans une application Direct3D 11 sur du matériel Direct3D 10.

La prise en charge des nuanceurs de calcul sur le matériel de niveau inférieur est uniquement pour les appareils compatibles avec Direct3D 10.x. Les nuanceurs de calcul ne peuvent pas être utilisés sur le matériel Direct3D 9.x.

Pour case activée si le matériel Direct3D 10.x prend en charge les nuanceurs de calcul, appelez ID3D11Device::CheckFeatureSupport. Dans l’appel CheckFeatureSupport , transmettez la valeur D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS au paramètre Feature , transmettez un pointeur vers la structure D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS au paramètre pFeatureSupportData et transmettez la taille de la structure D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS au paramètre FeatureSupportDataSize . CheckFeatureSupport retourne TRUE dans le membre ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x de D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS si le matériel Direct3D 10.x prend en charge les nuanceurs de calcul.

La section Référence 10Level9 répertorie les différences entre le comportement des différentes méthodes ID3D11Device et ID3D11DeviceContext à différents niveaux de fonctionnalité 10Level9.

Vues d’accès non ordonnées (UAV)

Les vues d’accès non ordonnées brutes (RWByteAddressBuffer) et structurées (RWStructuredBuffer) sont prises en charge sur le matériel de bas niveau, avec les limitations suivantes :

  • Un seul UAV peut être lié à un pipeline à la fois via ID3D11DeviceContext::CSSetUnorderedAccessViews.
  • Le décalage de base d’un UAV brut doit être aligné sur une limite de 256 octets (au lieu d’un alignement de 16 octets requis pour le matériel Direct3D 11).

Les UAV typées ne sont pas prises en charge sur le matériel de niveau inférieur. Cela inclut les UAV Texture1D, Texture2D et Texture3D .

Les nuanceurs de pixels sur le matériel de niveau inférieur ne prennent pas en charge l’accès non ordonné.

Vues de ressources du nuanceur (SMV)

Les mémoires tampons brutes et structurées en tant que vues de ressources de nuanceur sont prises en charge sur le matériel de niveau inférieur pour l’accès en lecture seule, comme sur le matériel Direct3D 11. Ces types de ressources sont pris en charge pour les nuanceurs de vertex, les nuanceurs de géométrie, les nuanceurs de pixels ainsi que les nuanceurs de calcul.

Groupes de threads

Un nuanceur de calcul peut s’exécuter sur de nombreux threads en parallèle, au sein d’un groupe de threads.

Les groupes de threads sont pris en charge sur le matériel de niveau inférieur, avec les limitations suivantes :

Dimensions du groupe de threads

Les groupes de threads définis pour le matériel de niveau inférieur sont limités aux dimensions X et Y de 768. Cette valeur est inférieure aux valeurs maximales de 1 024 pour le matériel Direct3D 11. La dimension Z maximale de 64 est inchangée.

Le nombre total de threads dans le groupe (X × Y × Z) est limité à 768. Ce nombre est inférieur à la limite de 1 024 pour le matériel Direct3D 11.

Si ces nombres sont dépassés, la compilation du nuanceur échoue.

index de thread Two-Dimensional

Un thread particulier au sein d’un groupe de threads est indexé à l’aide d’un vecteur 3D donné par (x,y,z).

Pour les nuanceurs de calcul fonctionnant sur du matériel de niveau inférieur, les groupes de threads prennent uniquement en charge deux dimensions. Cela signifie que la valeur Z dans le vecteur 3D doit toujours être 1.

Cette limitation s’applique spécifiquement aux éléments suivants :

Mémoire partagée du groupe de threads (TGSM)

La mémoire partagée du groupe de threads est limitée à 16 Ko sur le matériel de niveau inférieur. Ce nombre est inférieur aux 32 Ko disponibles pour le matériel Direct3D 11.

Un thread Compute Shader peut uniquement écrire dans sa propre région de TGSM. Cette région en écriture seule a une taille maximale de 256 octets ou moins, avec la diminution maximale à mesure que le nombre de threads déclarés pour le groupe augmente.

Le tableau suivant définit la taille maximale par thread d’une région TGSM pour le nombre de threads dans le groupe :

Nombre de threads dans le groupe Taille TGSM maximale par thread
0-64 256
65-68 240
69-72 224
73-76 208
77-84 192
85-92 176
93-100 160
101-112 144
113-128 128
129-144 112
145-168 96
169-204 80
205-256 64
257-340 48
341-512 32
513-768 16

 

Un thread Compute Shader peut lire le TGSM à partir de n’importe quel emplacement.

D3DCompile avec D3DCOMPILE_SKIP_OPTIMIZATION

D3DCompile retourne E_NOTIMPL lorsque vous passez cs_4_0 comme cible du nuanceur avec l’option de compilation D3DCOMPILE_SKIP_OPTIMIZATION . La cible du nuanceur cs_5_0 fonctionne avec D3DCOMPILE_SKIP_OPTIMIZATION.

Direct3D 11 sur le matériel de niveau inférieur