> ## 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.

# CopyPageMappingsX (famille XBOX One)

> Manipule les tables de pages du GPU sur la chronologie du GPU. Peut être appelée sur les files d'attente de commandes graphiques et DMA, mais pas sur les files d'attente de calcul.

Manipule les tables de pages du GPU sur la chronologie du GPU. Vous pouvez appeler **CopyPageMappingsX** sur les files d'attente de commandes graphiques et DMA, mais pas sur les files d'attente de calcul.

## Syntaxe

```cpp theme={null}
HRESULT CopyPageMappingsX(  
         D3D12_GPU_VIRTUAL_ADDRESS DestinationAddress,  
         UINT RangeCount,  
         const D3D12XBOX_PAGE_MAPPING_RANGE* pRanges,  
         D3D12_GPU_VIRTUAL_ADDRESS SourcePagePoolAddress,  
         UINT SourcePagePoolPageCount,  
         D3D12XBOX_PAGE_MAPPING_FLAGS Flags  
)  
```

### Paramètres

*DestinationAddress*   \_In\_\
Type : D3D12\_GPU\_VIRTUAL\_ADDRESS

Adresse de destination sous forme de **D3D12\_GPU\_VIRTUAL\_ADDRESS** (UINT64).

*RangeCount*   \_In\_\
Type : UINT

Nombre de plages de mappage.

*pRanges*   \_In\_reads\_(RangeCount)\
Type : [D3D12XBOX\_PAGE\_MAPPING\_RANGE\*](/fr-CA/reference/graphics/d3d12_x/structs/d3d12xbox_page_mapping_range)

Pointeur vers un tableau de structures **D3D12XBOX\_PAGE\_MAPPING\_RANGE**, de longueur *RangeCount*. Le membre *RangeType* de la structure spécifie comment les plages doivent être interprétées. Pour plus d'informations, consultez [D3D12XBOX\_PAGE\_MAPPING\_RANGE\_TYPE](/fr-CA/reference/graphics/d3d12_x/enums/d3d12xbox_page_mapping_range_type).

*SourcePagePoolAddress*   \_In\_\
Type : D3D12\_GPU\_VIRTUAL\_ADDRESS

Adresse source sous forme de **D3D12\_GPU\_VIRTUAL\_ADDRESS** (UINT64).

Si aucune plage de mappage de type **D3D12XBOX\_PAGE\_MAPPING\_RANGE\_TYPE\_INCREMENTING\_PAGE\_INDICES** ou **D3D12XBOX\_PAGE\_MAPPING\_RANGE\_TYPE\_CONSTANT\_PAGE\_INDEX** n'est définie, les paramètres **SourcePagePoolAddress** et **SourcePagePoolPageCount** peuvent tous deux valoir 0. Sinon, **SourcePagePoolAddress** et **SourcePagePoolPageCount** doivent tous deux être différents de zéro, et **SourcePagePoolPageAddress** doit être aligné sur 64 Ko

*SourcePagePoolPageCount*   \_In\_\
Type : UINT

Nombre de pages source.

*Flags*   \_In\_\
Type : [D3D12XBOX\_PAGE\_MAPPING\_FLAGS](/fr-CA/reference/graphics/d3d12_x/enums/d3d12xbox_page_mapping_flags)

Indicateurs qui spécifient des détails supplémentaires sur la façon dont les pages sont mappées.

### Valeur de retour

Type : HRESULT

L'un des [codes de retour Direct3D 12](https://msdn.microsoft.com/library/windows/desktop/dn706075\(v=vs.85\).aspx).

## Remarques

Cette méthode est analogue à l'utilisation de **MapTitlePhysicalPages** et de **D3DMapEsramMemory**, sauf que les pages source sont prises dans un mappage existant plutôt que dans des listes de numéros de pages. L'API copie des mappages de pages de 64 Ko d'un emplacement source vers un emplacement de destination dans les tables de pages du GPU. Les tables de pages du CPU ne sont pas modifiées par cette API. Lors de chaque appel à **CopyPageMappingsX**, le pipeline du GPU est vidé avant les mises à jour des tables de pages, et les caches TLB du GPU sont vidés après les mises à jour des tables de pages.

Le scénario d'utilisation prévu pour **CopyPageMappingsX** est le suivant :

1. Au moment de l'initialisation, préparez un « pool de pages source », qui sert de source pour les copies de mappages de pages.
   * Réservez une plage de mémoire virtuelle pour le pool de pages source à l'aide de [XMemVirtualAlloc](https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/reference/system/xmem/functions/xmemvirtualalloc) avec **MEM\_64K\_PAGES** | **MEM\_RESERVE** pour le paramètre **AllocationType**, ainsi que **XMEM\_GRAPHICS** | **XMEM\_MAPPABLE** pour **XMemFlags**.
   * Si vous utilisez des pages de mémoire système, allouez-les à l'aide de [XMemAllocatePhysicalPages](https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/reference/system/xmem/functions/xmemallocatephysicalpages).
   * Mappez les pages de mémoire système à la plage d'adresses réservée à l'aide de [XMemMapPhysicalPages](/fr-CA/reference/system/xmem/functions/xmemmapphysicalpages), ou mappez des pages ESRAM à la plage d'adresses réservée à l'aide de D3DMapEsramMemory, ou les deux.
2. Pour chaque ressource dont les mappages doivent être mis à jour à l'exécution :
   1. Utilisez la bibliothèque XG pour calculer la taille de la ressource en pages de 64 Ko.
   2. Réservez une plage de mémoire virtuelle pour la ressource à l'aide de [XMemVirtualAlloc](https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/reference/system/xmem/functions/xmemvirtualalloc) avec **MEM\_64K\_PAGES** | **MEM\_RESERVE** pour le paramètre **AllocationType**, ainsi que **XMEM\_GRAPHICS** | **XMEM\_MAPPABLE** pour **XMemFlags**.
   3. Créez un objet API de ressource placée en passant l'adresse virtuelle réservée de la ressource à [CreatePlacedResourceX](/fr-CA/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_createplacedresourcex).
3. À l'exécution, lorsque les mappages doivent être mis à jour, appelez **CopyPageMappingsX** sur la file d'attente de commandes, en copiant les mappages du pool de pages source vers la plage d'adresses réservée de la ressource.

Chaque opération de copie peut être une combinaison de plusieurs plages de mappage contiguës appliquées sur la plage d'adresses de destination. Chaque plage de mappage, décrite par une structure [D3D12XBOX\_PAGE\_MAPPING\_RANGE](/fr-CA/reference/graphics/d3d12_x/structs/d3d12xbox_page_mapping_range), spécifie selon son type une plage de pages dans le pool de pages source, des mappages nuls ou une instruction d'ignorer la plage.

Il n'est pas valide d'annuler le mappage du pool de pages source après avoir créé des mappages de pages GPU avec **CopyPageMappingsX**. Le titre doit s'assurer que, tant que les mappages copiés sont utilisés, les pages du pool de pages source restent mappées et ne sont pas libérées pour être réutilisées ailleurs. **CopyPageMappingsX** ne prend aucun type de compteur de références ni de verrou sur les pages source.

Les avantages de **CopyPageMappingsX** sont ses performances et la possibilité de combiner des mappages système, ESRAM et nuls en un seul appel (à condition que le pool de pages source comporte une combinaison de mappages système et ESRAM établis). De plus, l'utilisation d'un pool de pages source prédéfini permet de s'assurer que les pages physiques ne sont pas libérées accidentellement avant que le GPU n'effectue les mappages.

L'inconvénient de cette API est que le pool de pages source doit être établi à l'avance.

## Configuration requise

**En-tête :** d3d12\_x.h

**Bibliothèque :** d3d12\_x.lib

**Plateformes prises en charge :** famille XBOX One

## Voir aussi

[ID3D12CommandQueue](/fr-CA/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/id3d12commandqueue)\
[ClearPageMappingsX](/fr-CA/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_clearpagemappingsx)


## Related topics

- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr/nda/nda-topic-directory.md)
- [CopyTileMappings](/reference/graphics/d3d12/interfaces/id3d12commandqueue/methods/id3d12commandqueue_copytilemappings_public.md)
- [NDA topic directory - live Microsoft Learn links](/nda/nda-topic-directory.md)
- [Working with the Microsoft GDK Game OS memory manager](/build/console-features/memory/system-memory-working.md)
- [Authenticating your service with the Microsoft Store APIs](/publishing/xstore-commerce/xstore-authenticating-service.md)
