Skip to main content
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

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

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 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.
    • Mappez les pages de mémoire système à la plage d’adresses réservée à l’aide de 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 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.
  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, 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
ClearPageMappingsX
Last modified on October 6, 2026