DirectX 12 是 Microsoft 提供的一種低級(jí)編程 API ,與以前的版本相比,它減少了驅(qū)動(dòng)程序開(kāi)銷。 DirectX 12 使用命令隊(duì)列、命令列表等在底層硬件上提供了更大的靈活性和細(xì)粒度控制,從而提高了資源利用率。您可以利用這些功能,優(yōu)化應(yīng)用程序,并獲得比早期 DirectX 版本更好的性能。同時(shí),應(yīng)用程序本身必須負(fù)責(zé)資源管理、同步等。
越來(lái)越多的游戲標(biāo)題和其他圖形應(yīng)用程序采用 DirectX12 API 。視頻編解碼器 SDK 11 . 1 在 Windows 20H1 及更高版本的操作系統(tǒng)上引入了 DirectX 12 編碼支持。這使 DirectX 12 應(yīng)用程序能夠在所有受支持的 GPU 代中使用 NVENC 。視頻編解碼器 SDK 包包含 Nvencodepi 頭文件、演示用法的示例應(yīng)用程序以及使用 API 的編程指南。示例應(yīng)用程序包含 C ++包裝類,可以根據(jù)需要重用或修改。
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 時(shí),客戶端應(yīng)用程序還必須指定輸入緩沖區(qū)格式。
盡管在 DirectX 12 中傳遞給 Encode picture API 的大多數(shù)參數(shù)與其他接口中的參數(shù)相同,但仍存在某些功能差異。輸入端(客戶端應(yīng)用程序?qū)懭胼斎朊妫?NVENC 讀取輸入面)和輸出端( NVENC 寫(xiě)入位流面,應(yīng)用程序讀取位流面)的同步必須使用 fences 進(jìn)行管理。這與以前的 DirectX 接口不同,后者由操作系統(tǒng)運(yùn)行時(shí)和驅(qū)動(dòng)程序自動(dòng)處理。
在 DirectX 12 中,需要有關(guān)圍欄和圍欄值的附加信息作為編碼圖片 API 的輸入?yún)?shù)。這些圍欄和圍欄值用于同步 CPU – GPU 和 GPU – GPU 操作。應(yīng)用程序必須在NV_ENC_PIC_PARAMS::inputBuffer和NV_ENC_PIC_PARAMS:: outputBitstream中發(fā)送以下輸入和輸出結(jié)構(gòu)指針,其中包含圍欄和圍欄值:
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;
…
要在異步操作模式下檢索編碼輸出,應(yīng)用程序應(yīng)在調(diào)用NvEncLockBitstream之前等待完成事件。在同步操作模式下,應(yīng)用程序可以調(diào)用NvEncLockBitstream,因?yàn)?NVENCODE API 在返回編碼輸出之前確保編碼已完成。但是,在這兩種情況下,客戶機(jī)應(yīng)用程序都應(yīng)該在NV_ENC_LOCK_BITSTREAM::outputBitstream中傳遞指向NV_ENC_OUTPUT_RESOURCE_D3D12的指針,該指針在NvEncEncodePicture API 中使用。
關(guān)于作者
Dipti Taur 是 NVIDIA 多媒體驅(qū)動(dòng)程序團(tuán)隊(duì)的高級(jí)系統(tǒng)軟件工程師。她曾從事DirectX 12的各種視頻編解碼器、視頻驅(qū)動(dòng)程序開(kāi)發(fā)和應(yīng)用程序編程接口設(shè)計(jì)。她擁有印度孟買IIT電子工程碩士學(xué)位,專業(yè)從事通信和信號(hào)處理。
Sampurnananda Mishra 是 NVIDIA 負(fù)責(zé)多媒體驅(qū)動(dòng)程序的高級(jí)經(jīng)理。他研究過(guò) NVIDIA GPU s 上支持的各種多媒體用例。他的興趣包括視頻編碼、計(jì)算機(jī)視覺(jué)、視頻安全、深度學(xué)習(xí)和系統(tǒng)軟件。他擁有印度 IIT 坎普爾電子工程碩士學(xué)位,主攻數(shù)字信號(hào)處理。
審核編輯:郭婷
-
接口
+關(guān)注
關(guān)注
33文章
9521瀏覽量
157048 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5594瀏覽量
109758 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5599瀏覽量
124400
發(fā)布評(píng)論請(qǐng)先 登錄
PEC11J系列12mm SMD長(zhǎng)壽命編碼器:特性、參數(shù)與應(yīng)用全解析
M12編碼器線束加工:讓速度與位置反饋更加精確可靠
NVIDIA開(kāi)源Audio2Face模型及SDK
Nordic nRF5 SDK和softdevice介紹
第12屆NVIDIA Sky Hackathon精彩回顧
M12航空插頭引腳功能:從編碼差異看連接邏輯
NVIDIA Jetson + Isaac SDK 人形機(jī)器人方案全面解析
NVIDIA Jetson + Isaac SDK 在人形機(jī)器人領(lǐng)域的方案詳解
如何調(diào)試nRF5 SDK
NVIDIA Isaac Sim與NVIDIA Isaac Lab的更新
nRF Connect SDK(NCS)/Zephyr固件升級(jí)詳解 – 重點(diǎn)講述MCUboot和藍(lán)牙空中升級(jí)
使用NVIDIA SDK 11.1對(duì)DirectX 12進(jìn)行編碼
評(píng)論