此資訊截至 2019 年 11 月為最新。部分功能可能自那時起已變更或更新。
端對端延遲
玩家所感受到的延遲,是從按下控制器按鈕到顯示器上發生反應之間的時間。 圖 1. 偵測延遲的能力。

- 系統將控制器狀態傳送給遊戲。
- 遊戲讀取資訊並更新模擬。
- 模擬結果會轉譯出新的畫面。
- 系統將新轉譯的畫面傳送到顯示器。


三步驟的控制器輸入問題
控制器輸入問題可分解為下列步驟。- 相關的控制器輸入:盡快取得玩家輸入。
- 有效的時序:盡可能有效率地處理遊戲狀態的變更並轉譯結果。
- 回應迅速的顯示器:盡快繪製玩家的顯示畫面。
相關的控制器輸入
控制器已有所改進,且變得越來越複雜。這種複雜性隨著時間增加了延遲。控制器會因下列問題而增加延遲。- 無線傳輸:
- 流量
- 資料可靠性
- 介面額外負荷:
- 裝置管理
- 安全性
- 系統/作業系統額外負荷:
- 識別
- 剖析
- 呈現
有線與無線控制器
大部分 XBOX 控制器都以無線方式使用。不過,這種使用方式可能有下列問題。- 控制器可能與手機等其他裝置共用無線頻譜。
- 由於無線控制器需要電池,其耗電會帶來挑戰。
- 資料可能遺失。遊戲必須考量傳輸延遲的情況。
- 由於 USB 輪詢速度快,有線控制器的額外負荷只會增加 1 毫秒的延遲。
- 無線控制器的額外負荷最多可增加 3 毫秒的延遲。
控制器輸入取樣率與相位
當取樣的輸入與遊戲不同相位時,取樣率也可能造成問題。 圖 5. 輸入取樣率與相位。
- 電池使用量:每秒輪詢一千次會快速耗盡電池。
- 較高的 CPU 額外負荷:所有輪詢到的資料輸入都需要剖析和處理。
動態延遲輸入功能
請使用動態延遲輸入 (也稱為「同步輸入」) 取代最大化輪詢方法。此功能會自動最佳化控制器輸入時序,並執行下列動作:- 監視輸入查詢的節奏。
- 監視無線和有線效能。
- 確保在要求時,最新的輸入已經剖析且可供使用。
- 追蹤已轉譯畫面的呈現時間。
- 根據輸入查詢的節奏、無線/有線效能和呈現時間,維持一個「信賴」等級。
- 在 PIX 中提供信賴等級,以供效能調查使用。
系統改進
系統已進行多項變更,有助於改善輸入回應性和整體延遲。其中包括下列各項:- 以直接記憶體存取 (DMA) 為基礎的新設計,可將作業系統的參與降到最低。
GameInputAPI,可從連接的輸入裝置收集歷史資訊。- 有線控制器的按鈕按下會觸發更新。動態延遲輸入對類比輸入仍然有幫助。
- 改善無線資料的復原能力。
- 追蹤與圖形畫面時間相關的時序。
- 無線輸入延遲降低超過 50%。
- 有線輸入延遲降低超過 75%。
- 有線控制器的平均輸入延遲約為 1 毫秒。
有效的時序
圖 6. 畫面節奏。


PresentX 畫面節奏
PresentX 透過將轉譯和呈現頻率的表達方式抽象化,來變更畫面節奏。
先前,畫面時間是以顯示器重新整理速率 (VSync) 為基礎。對於目前的顯示器而言,這會變得複雜,因為其重新整理速率會隨著可變重新整理速率 (VRR) 等功能而改變。此外,畫面週期先前是以遊戲交換鏈數量的間接函數來計算。
相較之下,PresentX 使用持續時間來計算畫面時間,並使用定義的管線深度作為畫面週期。
圖 9. PresentX 畫面節奏:以 60 Hz 為目標。

PresentX 畫面節奏。
下列程式碼範例顯示 SetFrameIntervalX API。
SetFrameIntervalX 程式碼如下。
LengthInMicroseconds設定為 16,667 微秒。PeriodInIntervals設定為 2。- 常見的畫面間隔有各自的定義。在此範例中,定義為 D3D12XBOX_FRAME_INTERVAL_60_HZ。
PresentX 畫面排程
PresentX 可讓您正式控制 CPU 節流。在每個畫面上使用畫面排程會調整時序,讓間隔更為緊密。使用 PresentX 時,您會明確宣告等待。Present 中由圖形驅動程式執行的隱含執行階段節流已不復存在。
您可以使用以事件為基礎、由中斷驅動的排程來產生要顯示的新畫面。在畫面間隔內定義畫面原點時間,並根據統計資料中的工作負載持續更新原點。
下列程式碼範例顯示 ScheduleFrameEventX API。
ScheduleFrameEventX 程式碼如下。
ORIGIN 事件。識別畫面的管線權杖現在由 WaitFrameEventX 建立。此權杖會傳遞至 PresentX。
下列程式碼範例顯示 WaitFrameEventX API。
WaitFrameEventX 程式碼如下。
PresentX 呈現
PresentX API 的一項新功能是可能達到雙重緩衝的延遲,即使已設定三重緩衝轉譯也一樣。這表示雖然您可以設定三重緩衝,但如果畫面能及時完成,就會維持雙重緩衝,直到超過畫面時間而需要三個畫面緩衝區為止。
此呼叫需要將 D3D12XBOX_FRAME_PIPELINE_TOKEN 作為 D3D12XBOX_PRESENT_PLANE_PARAMETERS 的一部分,以追蹤端對端延遲。PresentX 也支援從非同步計算佇列呈現。
如需詳細資訊,請參閱 Xfest 19 中關於將圖形移植到 XBOX Series X|S 的簡報。
畫面統計資料的逐步流程
圖 10. GetFrameStatisticsX。
GetFrameStatisticsX API。
此程式碼著重於下列各項:
D3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_INPUTD3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_INTERVALD3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_EVENTD3D12XBOX_FRAME_STATISTICS_TYPE_RENDERD3D12XBOX_FRAME_STATISTICS_TYPE_PRESENTD3D12XBOX_FRAME_STATISTICS_TYPE_DISPLAY


ORIGIN 從何處發出訊號,以及何時呼叫 WaitFrameEventX。
圖 13. 畫面統計資料:D3D12XBOX_FRAME_EVENT_STATISTICS。






PresentX 呼叫。
圖 19. 畫面統計資料:GPU 到達最後一個 ResourceBarrier 轉換。

PresentX 中所使用之交換資源從寫入狀態進行的最後一個 ResourceBarrier 轉換的位置。
圖 20. 畫面統計資料:D3D12XBOX_RENDER_STATISTICS。






回應迅速的顯示器
現代顯示器會因下列因素而增加額外的延遲:- 傳輸額外負荷,也就是從 HDMI 纜線接收資料所需的時間。
- 處理 4K 或更大影像所需的時間,包括製造商特有的影像增強功能。
- 將影像縮放為顯示器原生解析度所需的時間。
- 將畫面繪製到顯示器所需的時間。
- 繪製選單、音量控制項或玩家控制顯示器可能需要之任何其他項目的覆疊所需的時間。
自動低延遲模式
自動低延遲模式 (ALLM) 是 HDMI 2.1 規格中定義的功能。ALLM 可讓視訊來源 (在這些範例中為 XBOX 主機) 指示所有相容元件進入低延遲模式。使用 ALLM 的顯示器會減少影像處理,以便在呈現影像前將延遲降到最低。這是系統層級的功能,與 VRR 類似。您不需要執行任何動作,但玩家必須確保已在主機的顯示設定中啟用 ALLM。XBOX One 和 XBOX Series X|S 都支援此功能。120 Hz 顯示器
XBOX 支援 120 Hz 顯示器。由於 HDMI 傳輸速率與顯示器重新整理速率本質上相互關聯,因此對每秒 60 個畫面 (FPS) 的遊戲也有好處。錯過 VBLANK
如果遊戲錯過 VBLANK,由於同一個轉譯畫面會顯示一次以上,玩家可能會感受到頓挫。在 60 Hz 顯示器上,這種頓挫最多可能持續 16.6 毫秒。如果遊戲在 120 Hz 顯示器上錯過 VBLANK (因為顯示器重新整理速率較快),頓挫可能只有 16.6 毫秒的一半,也就是最多 8.3 毫秒。 圖 26. 在 60 Hz 與 120 Hz 下錯過 VBLANK。
120 FPS 遊戲
有了 120 Hz 顯示器,XBOX Series X|S 就能實現 120 FPS 遊戲。下列程式碼示範如何將畫面間隔時間設定為 8,333 微秒,讓遊戲進入 120 Hz 模式。VRR
VRR 是 HDMI 2.1 中定義的功能。使用 VRR 可在其支援的範圍內順暢地重新整理顯示器,例如在 30 Hz-120 Hz 之間,而不是強制以 60 Hz 為節奏。您不需要執行任何動作即可使用 VRR,不過在需要穩定重新整理的情況下 (例如選單、載入場景或過場動畫) 可以將其關閉。XBOX 目前支援 HDMI VRR 和 AMD FreeSync。XBOX One 支援 40-60 Hz 的範圍,但顯示器可能具備不同的 VRR 功能。實際上,系統可以順暢地呈現時間延長約 4 毫秒的畫面。XBOX Series X|S 支援的重新整理速率
- 120 Hz
- 60 Hz
- 40 Hz
- 30 Hz
- 20 Hz
- 15 Hz
使用 VRR 時錯過 VBLANK
如先前所述,錯過 VBLANK 在 60 Hz 顯示器上可能產生最多 16.6 毫秒的頓挫,在 120 Hz 顯示器上則可能產生最多 8.3 毫秒的頓挫。不過,使用 VRR 時不會觀察到頓挫,因為顯示器的 VBLANK 會延遲到轉譯畫面完成為止。唯一的額外延遲是 VBLANK 被延遲的時間量,而不是固定的顯示器重新整理時間。 圖 27. 使用 VRR 時錯過 VBLANK。
40 FPS 遊戲
使用 120 Hz 顯示器可以實現 40 FPS 遊戲。系統會以 120 Hz 重新整理速率將同一個轉譯畫面傳輸三次。換句話說,在 40 FPS 時,畫面時間為 25 毫秒,系統會以 8.3 毫秒的重新整理速率將該畫面傳輸三次,即 25 毫秒。我們建議您支援 40 FPS 遊戲,因為與 30 FPS 相比,延遲可減少 8.3 毫秒。 下列程式碼範例示範如何將 40 FPS 遊戲的畫面間隔時間設定為 25,000 微秒。摘要
控制器輸入延遲的改進帶來:- 更快速、更相關的控制器更新。
- 降低作業系統額外負荷。
- 更直接的時序控制。
- 更完善的畫面統計資料,以及改進的 PIX 輸入與圖形追蹤。
- 新的顯示標準。
- 更快的重新整理速率。
後續步驟
如果您想要檢閱與此概觀相關之簡報資料中的資訊,請從 XBOX Developer Download Secure Data Storage (SDS) 下載下列檔案。- 投影片:Xfest 2019 Graphics Track PowerPoints ([2019.11]-Xfest2019GraphicsTrackPowerPoints.ZIP) 中的 XF2019_Graphics_04_Day1_Responsive_Gaming.pptx
- 視訊簡報:Xfest 2019 Graphics Track Videos ([2019.11]-Xfest2019GraphicsTrackVideos.ZIP) 中的 XF2019_Graphics_04_Day1_Responsive_Gaming.mp4
下載 Microsoft PowerPoint 簡報和影片
- 前往 Game Development Kit (GDK) 下載。
- 在 Select file type 下,選取 Conference Materials,然後選取 Confirm。
- 在 Select build/version number 下,選擇下列其中一個圖形簡報。
- Xfest 2019 Graphics Track PowerPoints
- Xfest 2019 Graphics Track Videos
- 選取 Download Now,然後等候 .zip 檔案下載完成。
- 前往本機的 [下載] 資料夾,然後從壓縮資料夾中解壓縮 (擷取) 檔案。
下載本文中提及的 Microsoft Game Development Kit 主機範例
- 前往 Game Development Kit (GDK) 下載。
- 在 Select file type 下,選取 GDK,然後選取 Confirm。
- 在 Select build/version number 下,選擇最新的 Microsoft GDKX (Sample only) 選項。
- 選取 Download Now,然後等候 .zip 檔案下載完成。
- 前往本機的 [下載] 資料夾,然後從壓縮資料夾中解壓縮 (擷取) 檔案。
- 選取 GDKSamples > Graphics,然後搜尋範例。
