Skip to main content
在 GPU 時間軸上操作 GPU 分頁表。您可以在圖形和 DMA 命令佇列上呼叫 CopyPageMappingsX,但不能在計算佇列上呼叫。

語法

參數

DestinationAddress   _In_
類型:D3D12_GPU_VIRTUAL_ADDRESS
以 D3D12_GPU_VIRTUAL_ADDRESS (UINT64) 表示的目的地位址。 RangeCount   _In_
類型:UINT
對應範圍的數目。 pRanges   _In_reads_(RangeCount)
類型:D3D12XBOX_PAGE_MAPPING_RANGE*
指向長度為 RangeCount 之 D3D12XBOX_PAGE_MAPPING_RANGE 結構陣列的指標。結構的 RangeType 成員指定範圍的解譯方式。如需詳細資訊,請參閱 D3D12XBOX_PAGE_MAPPING_RANGE_TYPE。 SourcePagePoolAddress   _In_
類型:D3D12_GPU_VIRTUAL_ADDRESS
以 D3D12_GPU_VIRTUAL_ADDRESS (UINT64) 表示的來源位址。 如果未設定範圍類型為 D3D12XBOX_PAGE_MAPPING_RANGE_TYPE_INCREMENTING_PAGE_INDICES 或 D3D12XBOX_PAGE_MAPPING_RANGE_TYPE_CONSTANT_PAGE_INDEX 的對應範圍,則 SourcePagePoolAddress 和 SourcePagePoolPageCount 參數都可以是 0。否則,SourcePagePoolAddress 和 SourcePagePoolPageCount 都必須為非零值,且 SourcePagePoolPageAddress 必須以 64KB 對齊 SourcePagePoolPageCount   _In_
類型:UINT
來源分頁計數。 Flags   _In_
類型:D3D12XBOX_PAGE_MAPPING_FLAGS
指定分頁對應方式之其他詳細資料的旗標。

傳回值

類型:HRESULT 其中一個 Direct3D 12 傳回碼。

備註

此方法類似於使用 MapTitlePhysicalPages 和 D3DMapEsramMemory,差別在於來源分頁取自現有的對應,而非分頁編號清單。此 API 會將 64KB 分頁對應從 GPU 分頁表內的來源位置複製到目的地位置。此 API 不會修改 CPU 分頁表。每次呼叫 CopyPageMappingsX 期間,會先排清 GPU 管線再執行分頁表更新,並在分頁表更新之後排清 GPU TLB 快取。 CopyPageMappingsX 的預期使用案例如下:
  1. 在初始化時,準備一個「來源分頁集區」,作為分頁對應複製的來源。
    • 使用 XMemVirtualAlloc 為來源分頁集區保留虛擬記憶體範圍,AllocationType 參數使用 MEM_64K_PAGES | MEM_RESERVE,XMemFlags 則使用 XMEM_GRAPHICS | XMEM_MAPPABLE。
    • 如果使用系統記憶體分頁,請使用 XMemAllocatePhysicalPages 配置系統記憶體分頁。
    • 使用 XMemMapPhysicalPages 將系統記憶體分頁對應到保留的位址範圍,和/或使用 D3DMapEsramMemory 將 ESRAM 分頁對應到保留的位址範圍。
  2. 針對需要在執行階段更新對應的每個資源:
    1. 使用 XG 程式庫計算資源的大小 (以 64KB 分頁為單位)。
    2. 使用 XMemVirtualAlloc 為資源保留虛擬記憶體範圍,AllocationType 參數使用 MEM_64K_PAGES | MEM_RESERVE,XMemFlags 則使用 XMEM_GRAPHICS | XMEM_MAPPABLE。
    3. 將資源的保留虛擬位址傳遞給 CreatePlacedResourceX,以建立放置資源 API 物件。
  3. 在執行階段需要更新對應時,在命令佇列上呼叫 CopyPageMappingsX,將對應從來源分頁集區複製到資源的保留位址範圍。
每個複製作業可以是在目的地位址範圍中執行的多個連續對應範圍的組合。每個對應範圍都以 D3D12XBOX_PAGE_MAPPING_RANGE 結構描述,依類型指定來源分頁集區內的分頁範圍、Null 對應,或略過該範圍的指示。 使用 CopyPageMappingsX 建立 GPU 分頁對應之後,取消對應來源分頁集區並不是有效的動作。遊戲必須確保只要複製的對應仍在使用中,來源分頁集區的分頁就會保持對應,且不會被釋放以供其他地方重複使用。CopyPageMappingsX 不會對來源分頁採取任何類型的參考計數或鎖定。 使用 CopyPageMappingsX 的好處在於其效能,而且允許在單一呼叫中混合系統、ESRAM 和 Null 對應 (前提是來源分頁集區已建立系統和 ESRAM 對應的組合)。此外,使用預先定義的來源分頁集區有助於確保實體分頁不會在 GPU 執行對應之前意外釋放。 使用此 API 的代價是必須事先建立來源分頁集區。

需求

標頭: d3d12_x.h 程式庫: d3d12_x.lib 支援的平台: XBOX One 系列

另請參閱

ID3D12CommandQueue
ClearPageMappingsX
Last modified on October 6, 2026