énumération D3D12_HEAP_TYPE (d3d12.h)

Spécifie le type de tas. Lorsque vous résidez, les segments de mémoire résident dans un pool de mémoire physique particulier avec certaines propriétés du cache du processeur.

Syntaxe

typedef enum D3D12_HEAP_TYPE {
  D3D12_HEAP_TYPE_DEFAULT = 1,
  D3D12_HEAP_TYPE_UPLOAD = 2,
  D3D12_HEAP_TYPE_READBACK = 3,
  D3D12_HEAP_TYPE_CUSTOM = 4,
  D3D12_HEAP_TYPE_GPU_UPLOAD
} ;

Constantes

 
D3D12_HEAP_TYPE_DEFAULT
Valeur : 1
Spécifie le tas par défaut. Ce type de tas rencontre la bande passante la plus élevée pour le GPU, mais ne peut pas fournir l’accès au processeur. Le GPU peut lire et écrire dans la mémoire à partir de ce pool, et les barrières de transition des ressources peuvent être modifiées. La majorité des tas et des ressources sont censées être situées ici et sont généralement remplies par le biais de ressources dans les tas de chargement.
D3D12_HEAP_TYPE_UPLOAD
Valeur : 2
Spécifie un tas utilisé pour le chargement. Ce type de tas dispose d’un accès processeur optimisé pour le chargement sur le GPU, mais ne connaît pas la quantité maximale de bande passante pour le GPU. Ce type de tas est idéal pour les données processeur-écriture-une seule fois, de lecture gpu ; mais la lecture par GPU est plus stricte que nécessaire. Le cache en lecture seule ou à partir du GPU est un cas d’usage acceptable pour les données ; mais ces utilisations sont difficiles à juger en raison de différentes conceptions et tailles de cache GPU. En cas de doute, tenez compte de la définition de gpu en lecture seule ou profilez la différence sur de nombreux GPU entre la copie des données dans un tas _DEFAULT et la lecture des données à partir d’un tas _UPLOAD.

Les ressources de ce tas doivent être créées avec D3D12_RESOURCE_STATE_GENERIC_READ et ne peuvent pas être modifiées de cette manière. L’adresse du processeur pour ces tas n’est généralement pas efficace pour les lectures du processeur.

Voici des utilisations courantes pour les tas _UPLOAD :

  • Initialisation de ressources dans un tas _DEFAULT avec des données du processeur.

  • Chargement de données dynamiques dans une mémoire tampon constante lue, répétée, par chaque vertex ou chaque pixel.



Les utilisations suivantes ne sont probablement pas bonnes pour _UPLOAD tas :

  • Re-initialisation du contenu d’une ressource chaque image.

  • Chargement de données constantes qui sont utilisées uniquement tous les autres appels Draw, où chaque dessin utilise une quantité non triviale d’autres données.

D3D12_HEAP_TYPE_READBACK
Valeur : 3
Spécifie un tas utilisé pour la lecture en arrière. Ce type de tas dispose d’un accès processeur optimisé pour la lecture des données à partir du GPU, mais ne connaît pas la quantité maximale de bande passante pour le GPU. Ce type de tas est le meilleur pour les données accessibles en écriture par GPU une fois, lisibles par l’UC. Le comportement du cache du processeur est réécrit en écriture différée, ce qui est propice à plusieurs lectures du processeur de sous-cache.

Les ressources de ce tas doivent être créées avec D3D12_RESOURCE_STATE_COPY_DEST et ne peuvent pas être modifiées.
D3D12_HEAP_TYPE_CUSTOM
Valeur : 4
Spécifie un tas personnalisé. L’application peut spécifier directement les propriétés du pool de mémoire et du cache du processeur, ce qui peut être utile pour les optimisations UMA, les moteurs multiples, les multi-adaptateurs ou d’autres cas spéciaux. Pour ce faire, l’application est censée comprendre l’architecture de l’adaptateur pour faire le bon choix. Pour plus d’informations, consultez

D3D12_FEATURE_ARCHITECTURE,
D3D12_FEATURE_DATA_ARCHITECTURE, et
GetCustomHeapProperties.

Remarques

Cette énumération est utilisée par les éléments d’API suivants :

Les types de tas sont répartis en deux catégories : les types de tas abstraits et les types de tas personnalisés.

Voici les types de tas abstraits :

  • D3D12_HEAP_TYPE_DEFAULT
  • D3D12_HEAP_TYPE_UPLOAD
  • D3D12_HEAP_TYPE_READBACK
Voici un type de tas personnalisé :
  • D3D12_HEAP_TYPE_CUSTOM
Les types de tas abstraits (_DEFAULT, _UPLOAD et _READBACK) sont utiles pour simplifier l’écriture d’applications neutres par adaptateur, car ces applications n’ont pas besoin de connaître l’architecture de mémoire de l’adaptateur. Pour utiliser un type de tas abstrait pour simplifier l’écriture d’applications neutres par adaptateur, l’application traite essentiellement l’adaptateur comme s’il s’agissait d’un adaptateur discret ou NUMA. Toutefois, l’utilisation des types de tas permet une traduction efficace pour les adaptateurs UMA. Les applications neutres de l’architecture de l’adaptateur doivent supposer qu’il existe deux pools de mémoire disponibles, où le pool avec la bande passante GPU la plus élevée ne peut pas fournir l’accès au processeur. Le pool avec la bande passante GPU la moins élevée peut avoir accès au processeur ; mais doit être optimisé pour le chargement vers GPU ou la lecture à partir du GPU.

Notez que les textures (contrairement aux mémoires tampons) ne peuvent pas être de type tas UPLOAD ou READBACK.

Exigences

Exigence Valeur
d’en-tête d3d12.h

Voir aussi

principales énumérations

segments de mémoire de descripteur