> ## 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 (família XBOX One)

> Manipula as tabelas de páginas da GPU na linha do tempo da GPU. Pode ser chamado em filas de comandos gráficos e DMA, mas não em filas de computação.

Manipula as tabelas de páginas da GPU na linha do tempo da GPU. Você pode chamar **CopyPageMappingsX** em filas de comandos gráficos e DMA, mas não em filas de computação.

## Sintaxe

```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  
)  
```

### Parâmetros

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

O endereço de destino como um **D3D12\_GPU\_VIRTUAL\_ADDRESS** (UINT64).

*RangeCount*   \_In\_\
Tipo: UINT

O número de intervalos de mapeamento.

*pRanges*   \_In\_reads\_(RangeCount)\
Tipo: [D3D12XBOX\_PAGE\_MAPPING\_RANGE\*](/pt-BR/reference/graphics/d3d12_x/structs/d3d12xbox_page_mapping_range)

Um ponteiro para uma matriz de estruturas **D3D12XBOX\_PAGE\_MAPPING\_RANGE**, de comprimento *RangeCount*. O membro *RangeType* da estrutura especifica como os intervalos devem ser interpretados. Para obter mais informações, consulte [D3D12XBOX\_PAGE\_MAPPING\_RANGE\_TYPE](/pt-BR/reference/graphics/d3d12_x/enums/d3d12xbox_page_mapping_range_type).

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

O endereço de origem como um **D3D12\_GPU\_VIRTUAL\_ADDRESS** (UINT64).

Se nenhum intervalo de mapeamento com os tipos de intervalo **D3D12XBOX\_PAGE\_MAPPING\_RANGE\_TYPE\_INCREMENTING\_PAGE\_INDICES** ou **D3D12XBOX\_PAGE\_MAPPING\_RANGE\_TYPE\_CONSTANT\_PAGE\_INDEX** estiver definido, os parâmetros **SourcePagePoolAddress** e **SourcePagePoolPageCount** poderão ser ambos 0. Caso contrário, **SourcePagePoolAddress** e **SourcePagePoolPageCount** devem ser diferentes de zero, e **SourcePagePoolPageAddress** deve estar alinhado em 64 KB

*SourcePagePoolPageCount*   \_In\_\
Tipo: UINT

A contagem de páginas de origem.

*Flags*   \_In\_\
Tipo: [D3D12XBOX\_PAGE\_MAPPING\_FLAGS](/pt-BR/reference/graphics/d3d12_x/enums/d3d12xbox_page_mapping_flags)

Sinalizadores que especificam detalhes adicionais sobre como as páginas são mapeadas.

### Valor retornado

Tipo: HRESULT

Um dos [códigos de retorno do Direct3D 12](https://msdn.microsoft.com/library/windows/desktop/dn706075\(v=vs.85\).aspx).

## Comentários

Este método é análogo ao uso de **MapTitlePhysicalPages** e **D3DMapEsramMemory**, exceto que as páginas de origem são obtidas de um mapeamento existente em vez de listas de números de páginas. A API copia mapeamentos de páginas de 64 KB de um local de origem para um local de destino dentro das tabelas de páginas da GPU. As tabelas de páginas da CPU não são modificadas por esta API. Durante cada chamada a **CopyPageMappingsX**, o pipeline da GPU é liberado antes que as atualizações da tabela de páginas sejam executadas, e os caches TLB da GPU são liberados após as atualizações da tabela de páginas.

O cenário de uso pretendido para **CopyPageMappingsX** é o seguinte:

1. No momento da inicialização, prepare um "pool de páginas de origem", que serve como origem das cópias de mapeamento de páginas.
   * Reserve um intervalo de memória virtual para o pool de páginas de origem usando [XMemVirtualAlloc](https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/reference/system/xmem/functions/xmemvirtualalloc) com **MEM\_64K\_PAGES** | **MEM\_RESERVE** para o parâmetro **AllocationType**, junto com **XMEM\_GRAPHICS** | **XMEM\_MAPPABLE** para **XMemFlags**.
   * Se estiver usando páginas de memória do sistema, aloque páginas de memória do sistema usando [XMemAllocatePhysicalPages](https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/reference/system/xmem/functions/xmemallocatephysicalpages).
   * Mapeie as páginas de memória do sistema para o intervalo de endereços reservado usando [XMemMapPhysicalPages](/pt-BR/reference/system/xmem/functions/xmemmapphysicalpages) e/ou mapeie páginas ESRAM para o intervalo de endereços reservado usando D3DMapEsramMemory.
2. Para cada recurso cujos mapeamentos precisam ser atualizados em tempo de execução:
   1. Use a biblioteca XG para calcular o tamanho do recurso em páginas de 64 KB.
   2. Reserve um intervalo de memória virtual para o recurso usando [XMemVirtualAlloc](https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/reference/system/xmem/functions/xmemvirtualalloc) com **MEM\_64K\_PAGES** | **MEM\_RESERVE** para o parâmetro **AllocationType**, junto com **XMEM\_GRAPHICS** | **XMEM\_MAPPABLE** para **XMemFlags**.
   3. Crie um objeto de API de recurso de posicionamento passando o endereço virtual reservado do recurso para [CreatePlacedResourceX](/pt-BR/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_createplacedresourcex).
3. Em tempo de execução, quando os mapeamentos precisarem ser atualizados, chame **CopyPageMappingsX** na fila de comandos, copiando os mapeamentos do pool de páginas de origem para o intervalo de endereços reservado do recurso.

Cada operação de cópia pode ser uma combinação de vários intervalos de mapeamento contíguos executados no intervalo de endereços de destino. Cada intervalo de mapeamento, descrito com uma estrutura [D3D12XBOX\_PAGE\_MAPPING\_RANGE](/pt-BR/reference/graphics/d3d12_x/structs/d3d12xbox_page_mapping_range), especifica por tipo um intervalo de páginas dentro do pool de páginas de origem, mapeamentos nulos ou uma instrução para ignorar o intervalo.

Não seria uma ação válida desfazer o mapeamento do pool de páginas de origem após criar mapeamentos de páginas da GPU com **CopyPageMappingsX**. O título deve garantir que, enquanto os mapeamentos copiados estiverem em uso, as páginas do pool de páginas de origem permaneçam mapeadas e não sejam liberadas para reutilização em outro lugar. **CopyPageMappingsX** não usa nenhum tipo de contagem de referências ou bloqueio nas páginas de origem.

Os benefícios de usar **CopyPageMappingsX** são o desempenho e a possibilidade de combinar mapeamentos de sistema, ESRAM e nulos em uma única chamada (desde que o pool de páginas de origem tenha uma combinação de mapeamentos de sistema e ESRAM estabelecidos). Além disso, o uso de um pool de páginas de origem predefinido ajuda a garantir que as páginas físicas não sejam liberadas acidentalmente antes que a GPU faça os mapeamentos.

O custo de usar esta API é que o pool de páginas de origem precisa ser estabelecido com antecedência.

## Requisitos

**Cabeçalho:** d3d12\_x.h

**Biblioteca:** d3d12\_x.lib

**Plataformas com suporte:** família XBOX One

## Confira também

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


## Related topics

- [CopyTileMappings](/pt-BR/reference/graphics/d3d12/interfaces/id3d12commandqueue/methods/id3d12commandqueue_copytilemappings_public.md)
- [Diretório de tópicos NDA: links ativos do Microsoft Learn](/pt-BR/nda/nda-topic-directory.md)
- [CopyDescriptors](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_copydescriptors_public.md)
- [CopyTiles](/pt-BR/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_copytiles_public.md)
- [GameInputAxisMapping](/pt-BR/reference/input/gameinput/structs/gameinputaxismapping.md)
