D3D12 視訊編碼

此頁面提供驅動程式開發人員有關 Direct3D12 視訊編碼功能的一般資訊。 如需其他資訊,包括應用層級細節,請參閱 D3D 視訊編碼規格

關於 Direct3D 12 視訊編碼

Windows 11 (WDDM 3.0) 之前,DirectX 12 提供應用程式和驅動程式層級介面 (API 和 DIS) ,以支援數個視訊應用程式的 GPU 加速,包括視訊譯碼、視訊處理和動作估計。

從 Windows 11 開始,D3D12 已將視訊編碼功能新增至現有的影片 API/DDI 系列。 此功能提供一組一致的編碼 API/DIS,這些 API 與現有的 D3D12 架構一致,並可讓開發人員使用 GPU 加速視訊引擎執行視訊編碼。

視訊編碼架構可存取不同案例的視訊編碼硬體加速功能,例如物聯網 (IoT) 、雲端、媒體 API、機器學習和遊戲串流。

支援的轉碼器

從 Windows 11 開始,支援的編解碼器是 H.264 和 HEVC,雖然 D3D12 視訊編碼架構可為較新的編解碼器提供開放擴充性,例如 AV1。

架構介面的編解碼器特定層面會委派給編解碼器特定的結構,以及其對等位類型的存取權。 例如, D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 結構包含具有編解碼器特定 D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 指標的聯集,以及包含編解碼器特定組態資訊的 D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 結構。

為了在擴充性上保留二進位介面相容性,等位類型一律包含編解碼器特定結構的指標。 等位類型會根據主機架構的指標大小,具有固定大小。 此決策也會防止保存 (成員或包含匿名) 等位型別的結構在擴充介面時變更其類型大小。 某些等位只包含列舉型別的指標;為了一致,這些列舉類型也會在新的編解碼器需要比列舉更複雜的類型來表示這些概念時,參考為指標。

報告視訊編碼支援和功能

現有的視訊相關架構已擴充,以允許驅動程式報告視訊編碼支援和功能。

  • D3D12DDI_FEATURE_VERSION_VIDEO_0083_0是定義 Windows 11 中引進之所有 D3D12 視訊編碼里程碑的第一個完整實作的版本號碼。

  • 已擴充D3D12DDICAPS_TYPE_VIDEO_0020列舉,以包含下列視訊編碼支援值:

    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC = 31,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_PROFILE_LEVEL = 32,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 33,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION = 34,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INPUT_FORMAT = 35,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RATE_CONTROL_MODE = 36,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INTRA_REFRESH_MODE = 37,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 38,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_HEAP_SIZE = 39,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_CONFIGURATION_SUPPORT = 40,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_SUPPORT = 41,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 42,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RESOURCE_REQUIREMENTS = 43

    D3D 運行時間會呼叫驅動程式 的PFND3D12DDI_VIDEO_GETCAPS回 呼,以查詢視訊編碼支援。

  • 支援視訊編碼的驅動程式會為 D3D 運行時間提供 其D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0 結構中視訊編碼回呼函式的指標。

D3D12 視訊編碼回呼函式

驅動程式會實作下列回呼函式,以支援 D3D12 視訊編碼。

測試

下列測試包含在 Windows Hardware Lab Kit (WHLK) 的一部分。 如需詳細資訊,請參閱 WHLK。

測試名稱 描述
CreateVideoEncoder 根據回報的 CheckFeatureSupport 相關案例,驗證 VideoEncoder/VideoEncoderHeap 的建立。
SingleEncodeH264/HEVC 結構化影像基本檢查的 QR 代碼型測試。 輸入影像序列會以預先定義的 QR 內容加上戳記,然後編碼和譯碼,最後檢查以確保輸出值 (和某種程度、品質) 預期。
EncodeProfileLevelSuggestionsH264/HEVC 驗證D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT。SuggestedProfile/Level 值會根據 H.264/HEVC 規格以及作為輸入傳遞至D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT的組態,如預期般運作。
EncodeHeapSizeCap 使用不同增加的輸入自變數來驗證增加的記憶體使用量。
SimpleGOPEncodeH264/HEVC (10 位) 使用不同的解析度、GOP 模式、配量模式和其他編解碼器組態來轉碼輸入視訊,並根據輸入視訊串流差異驗證輸出編碼的視訊。 此比較是使用尖峰訊號與雜訊比率 (PSNR) 來完成。
EncodeSubregions/ResolutionReconfiguration 驗證即時重新設定。
EncodeH264LongTermReferences 驗證長期圖片參考的使用。
EncodeIntraRefresh 使用開放式 IPP 驗證重新整理的簡單案例...P。。。P。。。共和黨。
VideoEncodeCommandListFeatures 驗證視訊編碼命令清單的預先分割和標記。
VideoEncodeTimestamps 驗證視訊編碼命令清單的時間戳。

視訊編碼案例

OneCore

D3D12 視訊編碼支援可在只有 D3D12 的平臺上啟用可攜式硬體加速視訊編碼。 這包括雲端計算和IoT平臺所使用的各種 OneCore SKU。 視訊編碼加速可在這些案例中使用,而不需要使用平臺特定解決方案。

媒體 API

低階且可攜式方式的視訊編碼功能可跨所有硬體廠商存取。 這可讓較高層級的媒體 API (,例如媒體基礎) 在此 API 之上建置其媒體層,以負責抽象化不同的硬體平臺。 根據 API 的低階設計,這些較高層級的媒體層可以藉由精細控制視訊編碼會話的同步處理和記憶體配置/落地層面,例如完整控制參考圖片管理和 bitstream 標頭的寫入責任,來優化其案例。 此責任轉移至位於此 API 上方的圖層,也可讓硬體廠商擁有一組一致的編碼原則,例如 (。媒體層中可重複使用的 DPB 啟發學習法,例如可跨不同硬體平臺重複使用的調適型 GOP) 。

與 D3D 圖形、計算和機器學習的互操作性

D3D12 視訊編碼 API 可讓 D3D12 視訊編碼和 D3D12 圖形、計算和機器學習案例之間有效率的互操作性,這對於透過相機串流執行機器學習推斷等案例很有趣。

遊戲串流案例

D3D12 視訊編碼 API 可啟用需要高效能低階 API 的遊戲串流案例。