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 :- 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.
- Pour chaque ressource dont les mappages doivent être mis à jour à l’exécution :
- Utilisez la bibliothèque XG pour calculer la taille de la ressource en pages de 64 Ko.
- 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.
- Créez un objet API de ressource placée en passant l’adresse virtuelle réservée de la ressource à CreatePlacedResourceX.
- À 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.
Configuration requise
En-tête : d3d12_x.h Bibliothèque : d3d12_x.lib Plateformes prises en charge : famille XBOX OneVoir aussi
ID3D12CommandQueueClearPageMappingsX
