Skip to main content
呈現一組資源以供顯示。

語法

參數

PlaneCount   _In_range_(1, D3D12XBOX_PRESENT_PLANES_MAX) 類型:UINT 要呈現的平面數目。多個平面可以由一個背景平面加上重疊層,以及/或者成對的畫面標準與高動態範圍 (HDR) 合成所組成。使用平面數目 0 可將顯示切換為 null,這會將顯示色彩設定為黑色。XBOX Series X|S 允許混合大於 1920 x 1080 的平面,而且兩者都可以是高動態範圍。 pPlaneParameters   _In_reads_(PlaneCount) 類型:const D3D12XBOX_PRESENT_PLANE_PARAMETERS* 指向參數陣列第一個元素的指標,這些參數用於控制每個所提供平面的呈現方式。請依 Z 順序 (由後至前) 排列陣列。先依最接近程度設定元素,再依色彩空間 (HDR-SDR) 配對設定。 pPresentParameters   _In_opt_ 類型:const D3D12XBOX_PRESENT_PARAMETERS* 選擇性。指向一組用於控制呈現之參數的指標。

傳回值

類型:HRESULT HRESULT 成功或錯誤碼。 如果指定的交換資源已成功排入佇列等待呈現,則傳回 S_OK。 如果指定了 D3D12XBOX_PRESENT_FLAG_DO_NOT_WAIT,且 pPlaneParameters 中一或多個指定的 ppResources 目前正在顯示或已排入佇列等待呈現,則傳回 ERROR_WAS_STILL_DRAWING。 如果參數無效或呈現的合成無效,則傳回 E_INVALIDARG。 如果 GPU 在呼叫 PresentX 之前沒有回應,則傳回 D3DERR_DEVICEREMOVED

備註

pPlaneParameters 內所含 ppResources 陣列中的資源,可作為舊版交換鏈結的替代品,且建立時必須支援翻轉至顯示器。若要啟用翻轉支援,請呼叫 CreateCommittedResource,並在 pDesc 參數中設定 D3D12_HEAP_FLAG_ALLOW_DISPLAY 旗標 (D3D12_HEAP_FLAGS)。目前尚不允許使用沒有基礎堆積所建立的資源。 交換鏈結已演變成由使用者管理的可顯示資源集合;不過,由於 TLB 的限制,同一時間只能具現化有限數量的此類資源。如果可顯示資源目前正由顯示器掃描輸出或已排入佇列等待呈現,就無法將其釋放到解除配置的程度。您必須先將顯示翻轉至另一組資源或 null (如果應用程式已關閉)。若要執行 null 呈現,請呼叫 PresentX(0, nullptr, nullptr);。 由於 ppResources 取代了交換鏈結,交換資源的色彩空間現在會宣告為 pPlaneParameters 中所含平面參數的一部分,而 GameDVR 的自動色調對應則是透過 D3D12XBOX_RESOURCE_FLAG_ALLOW_AUTOMATIC_GAMEDVR_TONE_MAP 資源建立旗標為資源選取,但會產生額外的堆積儲存空間及每次 Present 的 GPU 成本。XBOX Series X|S 新增了兩種交換資源格式:DXGI_FORMAT_R9G9B9E5_SHAREDEXP 與 DXGI_FORMAT_A8_UNORM。DXGI_FORMAT_A8_UNORM 交換資源應一律與 DXGI_FORMAT_R9G9B9E5_SHAREDEXP 交換資源配對。當需要 Alpha 通道時 (例如混合多個平面時),它會作為 RGBE 資源的 Alpha 通道。XBOX Series X|S 也允許透過 D3D12XBOX_RESOURCE_FLAG_ALLOW_DCC 資源建立旗標,對交換資源進行差異色彩壓縮 (Delta Color Compression)。 如果未提供用於產生資源 (或至少用於開始建構資源) 之畫面的識別資訊,資源可能不會被呈現。這是將呈現統計資料與個別畫面建立關聯、從起點測量完整畫面管線延遲,以及對顯示進行輸入取樣所必需的。識別是透過 pPlaneParameters 參數的 Token 成員來執行,由於各平面的呈現頻率可能不同而具有不同的基礎畫面,因此可以為每個合成平面 (背景與重疊) 指定不同的 D3D12XBOX_FRAME_PIPELINE_TOKEN 值。對於全部來自同一畫面的平面,應重複包含管線權杖。 畫面及其相關聯的交換資源必須依產生的順序呈現。源自 WaitFrameEventX 的畫面管線權杖串流會透過 PresentX 終止,不允許捨棄畫面或重新排序。在更新一或多個其他平面時,可以讓某個合成平面的內容持續保留在顯示器上;若要這麼做,請傳遞與上一次呼叫 PresentX 時為該平面提供的相同資源與畫面權杖。 若要移除在一連串 PresentX 呼叫期間建立的合成平面,請在後續呼叫 PresentX 時,從 pPlaneParameters 所指向的陣列中省略該平面的資源與權杖。 已呈現的交換資源會在其排定的 VBlank 時翻轉至顯示器;這是假設 PresentX 呼叫是在 pPresentParameters 的 ImmediateThresholdPercent 中所宣告的目標臨界值內發出並處理。如果 PresentX 錯過了 VBlank 但在臨界值內抵達,則會立即翻轉至顯示器。此臨界值是根據顯示掃描輸出時間 (VBlank 到 VBlank) 的百分比,而不是所定義畫面間隔的百分比。此外,與透過在 pPresentParameters 中使用 D3D12XBOX_PRESENT_FLAG_IMMEDIATE 旗標所安排的立即呈現 (會立即觸發下一個畫面的起點) 不同,根據臨界值進行的立即翻轉只有在後續畫面起點的時間已經過去時,才會發出該起點的訊號。

需求

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

另請參閱

ID3D12CommandQueue
Last modified on October 6, 2026