DirectX11基礎 ---設備(Device)和設備上下文(Device context)

設備(Device)

ID3DllDevice 接口提供了許多方法來創建着色器程序對象、資源、狀態對象和查詢對象(等等)。它還提供了檢查某些硬件特性的可用性的方法,以及許多與診斷和調試相關的方法。通常,可以將設備看作應用程序中使用的各種資源的提供者。
除了作爲Direct3D 11的資源提供者,該設備還封裝了特性級別(feature levels) 的概念。使用特性級別是一種允許應用程序在硬件上使用和運行Direct3D 11 API的技術,這些硬件實現了一些較老的功能,比如Direct3D 10 gpu。這允許應用程序使用同樣的渲染API,但仍然針對幾代硬件。

設備上下文(Device Context)

雖然設備(device) 用於創建管道使用的各種資源,但爲了實際使用這些資源並操縱管道本身,我們將使用設備上下文(device context) 。設備上下文用於將創建的資源、着色器對象和狀態對象綁定到管道。它們也被用來控制渲染和計算管道的執行。此外,它們還提供了操作設備創建的資源的方法。通常,設備上下文可以被看作是設備產生的資源的消費者,設備作爲處理管道的接口。
設備上下文在ID3DllDeviceContext接口中實現。爲了幫助引入多線程渲染支持,提供了兩種不同風格的上下文。第一個稱爲即時上下文(immediate context),第二個稱爲延遲上下文(deferred context) 。雖然這兩種類型實現了相同的設備上下文接口,但是它們的使用具有非常不同的語義。我們將在下面討論這兩個上下文背後的概念。

即使上下文(immediate context)

即使上下文或多或少是到渲染管線的直接鏈接。當從該上下文中調用方法時,Direct3D 11運行時將立即提交該方法,以便在驅動程序中執行。只允許一個即時上下文,並且在創建設備的同時創建它。這個上下文可以看作是直接與渲染管線的所有組件交互的接口。該上下文必須用作主渲染線程,並作爲GPU的主接口。

延遲上下文(deferred context)

延遲上下文是一種次要的上下文類型,它提供了一種線程安全機制,用於記錄來自次要線程(主渲染線程除外)的一系列命令。這用於生成一個命令列表對象,該對象可以稍後在即時上下文中“回放”。允許從其他線程生成命令列表提供了在多核CPU系統上發現性能改進的一些可能性。此外,Direct3D 11還允許在多個線程上執行異步資源創建,這提供了簡化多線程加載情況的能力。當考慮到當前和未來的PC硬件環境時,這些都是很重要的概念,我們可以期望在給定的PC中有越來越多的CPU內核可用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章