• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 圖形/仿真

    使用 NVIDIA 視頻編解碼器 SDK 11.1 對 DirectX 12 進行編碼

    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. */
     } NV_ENC_FENCE_POINT_D3D12; 

    初始化 NVENC 時,客戶端應用程序還必須指定輸入緩沖區格式。

    盡管在 DirectX 12 中傳遞給 Encode picture API 的大多數參數與其他接口中的參數相同,但仍存在某些功能差異。輸入端(客戶端應用程序寫入輸入面, NVENC 讀取輸入面)和輸出端( NVENC 寫入位流面,應用程序讀取位流面)的同步必須使用 fences 進行管理。這與以前的 DirectX 接口不同,后者由操作系統運行時和驅動程序自動處理。

    在 DirectX 12 中,需要有關圍欄和圍欄值的附加信息作為編碼圖片 API 的輸入參數。這些圍欄和圍欄值用于同步 CPU – GPU 和 GPU – GPU 操作。應用程序必須在NV_ENC_PIC_PARAMS::inputBufferNV_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;     
         …
     } NV_ENC_OUTPUT_RESOURCE_D3D12; 

    要在異步操作模式下檢索編碼輸出,應用程序應在調用NvEncLockBitstream之前等待完成事件。在同步操作模式下,應用程序可以調用NvEncLockBitstream,因為 NVENCODE API 在返回編碼輸出之前確保編碼已完成。但是,在這兩種情況下,客戶機應用程序都應該在NV_ENC_LOCK_BITSTREAM::outputBitstream中傳遞指向NV_ENC_OUTPUT_RESOURCE_D3D12的指針,該指針在NvEncEncodePicture API 中使用。

    有關更多信息,請參閱視頻編解碼器 SDK 編程指南。與其他 DirectX 接口相比, DirectX 12 中的編碼器性能接近。編碼器質量在所有接口上都是相同的。

    ?

    0

    標簽

    人人超碰97caoporen国产