Partager via


énumération D3D12_HEAP_TYPE (d3d12.h)

Spécifie le type de tas. Lorsqu’ils sont résidents, les tas résident dans un pool de mémoire physique particulier avec certaines propriétés de cache du processeur.

Syntax

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 présente 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és se trouver ici et sont généralement renseignés via des ressources dans des tas de chargement.
D3D12_HEAP_TYPE_UPLOAD
Valeur : 2
Spécifie un tas utilisé pour le chargement. Ce type de tas a un accès au processeur optimisé pour le chargement sur le GPU, mais ne bénéficie pas de la quantité maximale de bande passante pour le GPU. Ce type de tas est idéal pour les données CPU-write-once, GPU-read-once ; mais gpu-read-once est plus strict que nécessaire. Gpu-read-once-or-from-cache est un cas d’usage acceptable pour les données ; mais ces utilisations sont difficiles à juger en raison de conceptions et de tailles de cache GPU différentes. En cas de doute, respectez la définition gpu-read-once ou profilez la différence sur de nombreux GPU entre la copie des données dans un tas de _DEFAULT et la lecture des données à partir d’un tas de _UPLOAD.

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

Voici les utilisations courantes pour les tas de _UPLOAD :

  • Initialisation des ressources dans un tas de _DEFAULT avec les données de l’UC.

  • Chargement de données dynamiques dans une mémoire tampon constante qui est lue, à plusieurs reprises, par chaque sommet ou pixel.



Les éléments suivants ne sont probablement pas bons pour les tas _UPLOAD :

  • Réin initialisation du contenu d’une ressource à chaque image.

  • Chargement de données constantes qui sont utilisées uniquement pour 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. Ce type de tas a un accès au processeur optimisé pour la lecture des données à partir du GPU, mais ne bénéficie pas de la quantité maximale de bande passante pour le GPU. Ce type de tas est idéal pour les données lisibles par l’UC en écriture par GPU. Le comportement du cache de l’UC est l’écriture différée, ce qui est propice à plusieurs lectures d’UC de sous-ligne de 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, le multi-moteur, le multi-adaptateur ou d’autres cas spéciaux. Pour ce faire, l’application doit 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 se répartissent 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 sans adaptateur, car ces applications n’ont pas besoin de connaître l’architecture de la mémoire de l’adaptateur. Pour utiliser un type de tas abstrait pour simplifier l’écriture d’applications sans 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 le moins de bande passante GPU peut avoir accès au processeur ; mais doit être optimisé pour le chargement sur GPU ou la lecture à partir d’un GPU.

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

Configuration requise

Condition requise Valeur
En-tête d3d12.h

Voir aussi

Énumérations principales

Tas de descripteurs