DirectX 12 是 Microsoft 提供的一種低級編程 API ,與以前的版本相比,它減少了驅動程序開銷。 DirectX 12 使用命令隊列、命令列表等在底層硬件上提供了更大的靈活性和細粒度控制,從而提高了資源利用率。您可以利用這些功能,優化應用程序,并獲得比早期 DirectX 版本更好的性能。同時,應用程序本身必須負責資源管理、同步等。
越來越多的游戲標題和其他圖形應用程序采用 DirectX12 API 。視頻編解碼器 SDK 11 . 1 在 Windows 20H1 及更高版本的操作系統上引入了 DirectX 12 編碼支持。這使 DirectX 12 應用程序能夠在所有受支持的 GPU 代中使用 NVENC 。視頻編解碼器 SDK 包包含 Nvencodepi 頭文件、演示用法的示例應用程序以及使用 API 的編程指南。示例應用程序包含 C ++包裝類,可以根據需要重用或修改。
typedef struct _NV_ENC_FENCE_POINT_D3D12 { void* pFence; /**< [in]: Pointer to ID3D12Fence. This fence object is used for synchronization. */ uint64_t value; /**< [in]: Fence value to reach or exceed before the GPU operation or fence value to set the fence to, after the GPU operation. */?
初始化 NVENC 時,客戶端應用程序還必須指定輸入緩沖區格式。
盡管在 DirectX 12 中傳遞給 Encode picture API 的大多數參數與其他接口中的參數相同,但仍存在某些功能差異。輸入端(客戶端應用程序寫入輸入面, NVENC 讀取輸入面)和輸出端( NVENC 寫入位流面,應用程序讀取位流面)的同步必須使用 fences 進行管理。這與以前的 DirectX 接口不同,后者由操作系統運行時和驅動程序自動處理。
在 DirectX 12 中,需要有關圍欄和圍欄值的附加信息作為編碼圖片 API 的輸入參數。這些圍欄和圍欄值用于同步 CPU – GPU 和 GPU – GPU 操作。應用程序必須在NV_ENC_PIC_PARAMS::inputBuffer和NV_ENC_PIC_PARAMS:: outputBitstream中發送以下輸入和輸出結構指針,其中包含圍欄和圍欄值:
typedef struct _NV_ENC_INPUT_RESOURCE_D3D12 { NV_ENC_REGISTERED_PTR pInputBuffer NV_ENC_FENCE_POINT_D3D12 inputFencePoint; … } NV_ENC_INPUT_RESOURCE_D3D12; typedef struct _NV_ENC_OUTPUT_RESOURCE_D3D12 { NV_ENC_REGISTERED_PTR pOutputBuffer; NV_ENC_FENCE_POINT_D3D12 outputFencePoint; …
要在異步操作模式下檢索編碼輸出,應用程序應在調用NvEncLockBitstream之前等待完成事件。在同步操作模式下,應用程序可以調用NvEncLockBitstream,因為 NVENCODE API 在返回編碼輸出之前確保編碼已完成。但是,在這兩種情況下,客戶機應用程序都應該在NV_ENC_LOCK_BITSTREAM::outputBitstream中傳遞指向NV_ENC_OUTPUT_RESOURCE_D3D12的指針,該指針在NvEncEncodePicture API 中使用。
關于作者
Dipti Taur 是 NVIDIA 多媒體驅動程序團隊的高級系統軟件工程師。她曾從事DirectX 12的各種視頻編解碼器、視頻驅動程序開發和應用程序編程接口設計。她擁有印度孟買IIT電子工程碩士學位,專業從事通信和信號處理。
Sampurnananda Mishra 是 NVIDIA 負責多媒體驅動程序的高級經理。他研究過 NVIDIA GPU s 上支持的各種多媒體用例。他的興趣包括視頻編碼、計算機視覺、視頻安全、深度學習和系統軟件。他擁有印度 IIT 坎普爾電子工程碩士學位,主攻數字信號處理。
審核編輯:郭婷
-
接口
+關注
關注
33文章
8645瀏覽量
151399 -
NVIDIA
+關注
關注
14文章
5021瀏覽量
103261 -
深度學習
+關注
關注
73文章
5507瀏覽量
121291
發布評論請先 登錄
相關推薦
評論