> ## 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 la forme d'un **D3D12\_GPU\_VIRTUAL\_ADDRESS** (UINT64).

*RangeCount*   \_In\_\
Type : UINT

Nombre de plages de mappage.

*pRanges*   \_In\_reads\_(RangeCount)\
Type : [D3D12XBOX\_PAGE\_MAPPING\_RANGE\*](/fr/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/reference/graphics/d3d12_x/enums/d3d12xbox_page_mapping_range_type).

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

Adresse source sous la forme d'un **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 être égaux à 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/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 **D3DMapEsramMemory**, sauf que les pages sources sont extraites d'un mappage existant au lieu de 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 au sein des tables de pages du GPU. Les tables de pages du processeur ne sont pas modifiées par cette API. Lors de chaque appel à **CopyPageMappingsX**, le pipeline GPU est vidé avant que les mises à jour des tables de pages ne soient effectuées, 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. Lors 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 sur la plage d'adresses réservée à l'aide de [XMemMapPhysicalPages](/fr/reference/system/xmem/functions/xmemmapphysicalpages), et/ou mappez des pages ESRAM sur la plage d'adresses réservée à l'aide de D3DMapEsramMemory.
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/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 afin de copier les mappages du pool de pages source vers la plage d'adresses réservée de la ressource.

Chaque opération de copie peut combiner plusieurs plages de mappage contiguës réparties sur la plage d'adresses de destination. Chaque plage de mappage, décrite par une structure [D3D12XBOX\_PAGE\_MAPPING\_RANGE](/fr/reference/graphics/d3d12_x/structs/d3d12xbox_page_mapping_range), spécifie selon son type une plage de pages au sein du pool de pages source, des mappages null ou une instruction pour 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** n'applique aucun type de décompte de références ni de verrou sur les pages sources.

Les avantages de **CopyPageMappingsX** sont ses performances et la possibilité de combiner des mappages système, ESRAM et null 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 garantir 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/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/id3d12commandqueue)\
[ClearPageMappingsX](/fr/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_clearpagemappingsx)


## Related topics

- [CopyTileMappings](/fr/reference/graphics/d3d12/interfaces/id3d12commandqueue/methods/id3d12commandqueue_copytilemappings_public.md)
- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr/nda/nda-topic-directory.md)
- [CopyDescriptors](/fr/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_copydescriptors_public.md)
- [CopyTiles](/fr/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_copytiles_public.md)
- [GameInputAxisMapping](/fr/reference/input/gameinput/structs/gameinputaxismapping.md)
