Pular para o conteúdo principal
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

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

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 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.
    • Mapeie as páginas de memória do sistema para o intervalo de endereços reservado usando 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 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.
  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, 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
ClearPageMappingsX
Última modificação em 6 de outubro de 2026