> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# D3D12_FEATURE_DATA_ARCHITECTURE

> Fournit des détails sur l'architecture de l'adaptateur, afin que votre application puisse mieux s'optimiser pour certaines propriétés de l'adaptateur.

Fournit des détails sur l'architecture de l'adaptateur, afin que votre application puisse mieux s'optimiser pour certaines propriétés de l'adaptateur.
<div class="alert">**Remarque**  Cette structure a été remplacée par la structure [D3D12\_FEATURE\_DATA\_ARCHITECTURE1](/fr/reference/graphics/d3d12/structs/d3d12_feature_data_architecture1_public). Si votre application cible Windows 10, version 1703 (Creators Update) ou ultérieure, utilisez plutôt **D3D12\_FEATURE\_DATA\_ARCHITECTURE1** (et [D3D12\_FEATURE\_ARCHITECTURE1](/fr/reference/graphics/d3d12/enums/d3d12_feature_public)).</div><div> </div>

## Syntaxe

```cpp theme={null}
typedef struct D3D12_FEATURE_DATA_ARCHITECTURE
{
    UINT NodeIndex;
    BOOL TileBasedRenderer;
    BOOL UMA;
    BOOL CacheCoherentUMA;
} D3D12_FEATURE_DATA_ARCHITECTURE
```

### Membres

*NodeIndex*\
Type : UINT

Dans un fonctionnement multiadaptateur, indique l'adaptateur physique de l'appareil concerné.
Consultez [Systèmes multiadaptateurs](https://learn.microsoft.com/en-us/windows/win32/direct3d12/multi-engine).
**NodeIndex** est renseigné par l'application avant l'appel à [CheckFeatureSupport](/fr/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public), car l'application peut récupérer des détails sur l'architecture de chaque adaptateur.

*TileBasedRenderer*\
Type : BOOL

Spécifie si le matériel et le pilote prennent en charge un rendu par tuiles.
Le runtime définit ce membre sur **TRUE** si le matériel et le pilote prennent en charge un rendu par tuiles.

*UMA*\
Type : BOOL

Spécifie si le matériel et le pilote prennent en charge UMA.
Le runtime définit ce membre sur **TRUE** si le matériel et le pilote prennent en charge UMA.

*CacheCoherentUMA*\
Type : BOOL

Spécifie si le matériel et le pilote prennent en charge UMA avec cohérence de cache.
Le runtime définit ce membre sur **TRUE** si le matériel et le pilote prennent en charge UMA avec cohérence de cache.

## Remarques

<h3><a id="How_to_use_UMA_and_CacheCoherentUMA" /><a id="how_to_use_uma_and_cachecoherentuma" /><a id="HOW_TO_USE_UMA_AND_CACHECOHERENTUMA" />Comment utiliser UMA et CacheCoherentUMA</h3>
Les applications D3D12 doivent se préoccuper de la gestion de la résidence de la mémoire et de la fourniture des propriétés de tas optimales.
Les applications D3D12 peuvent rester simples et fonctionner raisonnablement bien sur de nombreuses architectures GPU en gérant uniquement la résidence des ressources dans les tas [D3D12\_HEAP\_TYPE](/fr/reference/graphics/d3d12/enums/d3d12_heap_type_public)\_DEFAULT.
Ces applications doivent uniquement appeler [IDXGIAdapter3::QueryVideoMemoryInfo](https://learn.microsoft.com/en-us/windows/win32/api/dxgi1_4/nf-dxgi1_4-idxgiadapter3-queryvideomemoryinfo) pour DXGI\_MEMORY\_SEGMENT\_GROUP\_LOCAL,
et elles doivent tolérer que D3D12\_HEAP\_TYPE\_UPLOAD et D3D12\_HEAP\_TYPE\_READBACK proviennent de ce même groupe de segments de mémoire.

Toutefois, une conception aussi simple est trop contraignante pour les applications qui repoussent les limites.
Ainsi, D3D12\_FEATURE\_DATA\_ARCHITECTURE aide les applications à mieux s'optimiser pour les propriétés de l'adaptateur sous-jacent.

Certaines applications peuvent vouloir mieux s'optimiser pour les adaptateurs dédiés et assumer la complexité supplémentaire liée à la gestion des budgets de mémoire système et de mémoire vidéo.
Si la taille des tas de chargement rivalise avec celle des textures par défaut, l'utilisation de la mémoire peut presque doubler.
Pour prendre en charge de telles optimisations, une application peut soit détecter deux budgets de résidence, soit reconnaître que **UMA** est **false**.

Certaines applications peuvent vouloir mieux s'optimiser pour les adaptateurs intégrés/UMA, en particulier celles qui cherchent à prolonger l'autonomie de la batterie sur les appareils mobiles.
Les applications D3D12 simples sont contraintes de copier des données entre des tas ayant des attributions différentes, alors que ce n'est pas toujours nécessaire sur UMA.
Toutefois, la propriété UMA, à elle seule, englobe une zone grise relativement vague de conceptions GPU.
Ne supposez pas qu'UMA signifie que toute la mémoire accessible par le GPU peut être librement rendue accessible par le processeur, car ce n'est pas le cas.
Une propriété correspond plus étroitement à ce type de raisonnement : **CacheCoherentUMA**.

Lorsque **CacheCoherentUMA** est **false**, un seul budget de résidence est disponible, mais la conception UMA tire généralement parti des trois attributions de tas.
Il existe des possibilités d'éliminer la copie de ressources grâce à une utilisation judicieuse des ressources et des tas de chargement et de relecture, qui fournissent au processeur un accès à la mémoire.
Ces possibilités ne sont toutefois pas évidentes.
Les applications doivent donc faire preuve de prudence ; il est conseillé d'expérimenter sur divers systèmes « UMA », car il peut s'avérer justifié d'activer ou d'exclure certains ID d'appareil.
Il est recommandé de comprendre l'architecture mémoire du GPU et la manière dont les types de tas se traduisent en propriétés de cache.
Les chances de succès dépendent probablement de la fréquence à laquelle chaque processeur lit ou écrit les données, de la taille et de la localité des accès aux données, etc.
Pour les développeurs avancés : lorsque **UMA** est true et que **CacheCoherentUMA** est **false**, la caractéristique la plus distinctive de ces adaptateurs est que les tas de chargement utilisent toujours la combinaison d'écritures (write-combine).
Toutefois, certains adaptateurs UMA tirent parti à la fois des propriétés sans accès processeur et de combinaison d'écritures des tas par défaut et de chargement.
Pour plus de détails, consultez [GetCustomHeapProperties](/fr/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_getcustomheapproperties_public).

Lorsque **CacheCoherentUMA** est true, les applications peuvent plus sérieusement envisager d'abandonner l'attribution des tas et d'utiliser partout l'équivalent en tas personnalisé des tas de chargement.
Les optimisations UMA sans copie sont plus généralement encouragées, car davantage de scénarios tireront simplement parti de l'utilisation partagée.
Le modèle de mémoire se prête très bien à davantage de scénarios et à une adoption plus large.
Certains cas particuliers peuvent encore exister dans lesquels les avantages ne sont pas faciles à obtenir, mais ils devraient être beaucoup plus rares et moins préjudiciables que les autres options.
Pour les développeurs avancés : **CacheCoherentUMA** signifie qu'une part importante des caches de la hiérarchie mémoire est également unifiée ou intégrée entre le processeur et le GPU.
La caractéristique observable la plus distinctive est que les tas de chargement sont en réalité en écriture différée (write-back) sur **CacheCoherentUMA**.
Pour ces architectures, l'utilisation de la combinaison d'écritures sur les tas de chargement est généralement préjudiciable.

Les détails de bas niveau peuvent être ignorés par la grande majorité des applications à adaptateur unique.
Comme d'habitude, les applications à adaptateur unique peuvent simplifier les choses et s'assurer que les écritures du processeur dans les tas de chargement utilisent des modèles compatibles avec la combinaison d'écritures.
Les détails de plus bas niveau aident à renforcer les concepts pour les applications multiadaptateurs.
Les applications multiadaptateurs doivent probablement comprendre suffisamment bien les propriétés d'architecture des adaptateurs pour choisir les propriétés de tas personnalisé optimales afin de déplacer efficacement les données entre les adaptateurs.

## Configuration requise

**En-tête :** d3d12\_xs.h ou d3d12\_x.h\
**Bibliothèque :** d3d12\_xs.lib ou d3d12\_x.lib\
**Plateformes prises en charge** : consoles XBOX Series et famille XBOX One

## Voir aussi

[Structures principales](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)

[D3D12\_FEATURE](/fr/reference/graphics/d3d12/enums/d3d12_feature_public)


## Related topics

- [D3D12_FEATURE_DATA_ARCHITECTURE1](/fr/reference/graphics/d3d12/structs/d3d12_feature_data_architecture1_public.md)
- [D3D12_FEATURE](/fr/reference/graphics/d3d12/enums/d3d12_feature_public.md)
- [D3D12_HEAP_TYPE](/fr/reference/graphics/d3d12/enums/d3d12_heap_type_public.md)
- [D3D12_FEATURE_DATA_D3D12_OPTIONS](/fr/reference/graphics/d3d12/structs/d3d12_feature_data_d3d12_options_public.md)
- [D3D12_FEATURE_DATA_D3D12_OPTIONS5](/fr/reference/graphics/d3d12/structs/d3d12_feature_data_d3d12_options5_public.md)
