(Direct3D 10) API 層

Direct3D 10 執行時間是以層建構,從核心的基本功能開始,並在外部層建置選擇性和開發人員協助工具。

核心層

核心層預設存在;在 API 與設備磁碟機之間提供非常精簡的對應,將高頻率呼叫的額外負荷降到最低。 由於核心層對於效能很重要,因此只會執行重大驗證。

其餘的圖層是選擇性的。 一般規則是,層會新增功能,但不會修改現有的行為。 例如,核心函式會有與具現化偵錯層無關的相同傳回值,不過如果具現化偵錯層,可能會提供額外的偵錯輸出。

呼叫 D3D10CreateDevice 並提供一或多個 D3D10_CREATE_DEVICE_FLAG 值,以建立裝置時建立圖層。

偵錯層

偵錯層提供廣泛的額外參數和一致性驗證 (,例如驗證著色器連結和資源系結、驗證參數一致性,以及報告) 的錯誤描述。 偵錯層所產生的輸出是由使用 ID3D10InfoQueue 介面 存取的字串佇列所組成, (請參閱使用 ID3D10InfoQueue 自訂偵錯輸出 (Direct3D 10) ) 。 核心層所產生的錯誤會以偵錯層的警告反白顯示。

若要建立支援偵錯層的裝置,您必須安裝 DirectX SDK (以取得D3D10SDKLayers.DLL) ,然後在呼叫 D3D10CreateDevice時指定D3D10_CREATE_DEVICE_DEBUG旗標。 當然,使用偵錯層執行應用程式將會大幅變慢。 若要啟用/停用 D3DX10 API 的偵錯訊息,請呼叫 D3DX10DebugMute

當偵錯層列出記憶體流失時,它會輸出物件介面指標的清單及其易記名稱。 預設易記名稱為 「 < 未命名 > 」。 您可以使用 ID3D10DeviceChild::SetPrivateData 方法和 D3Dcommon.h 中的 WKPDID_D3DDebugObjectName GUID 來設定易記名稱。 例如,若要將 pTexture 命名為 sdkLayer 名稱為 mytexture.jpg,請使用下列程式碼:

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

一般而言,您應該從生產版本編譯這些呼叫。

切換至參考層

此層可讓應用程式在硬體裝置 (HAL) 與參考或軟體裝置 (REF) 之間轉換。 若要切換裝置,您必須先建立支援切換至參考層的裝置, (請參閱 D3D10CreateDevice) ,然後呼叫 ID3D10SwitchToRef::SetUseRef

所有裝置狀態、資源和物件都會透過此裝置轉換來維護。 不過,有時無法完全比對資源資料。 這是因為某些資訊可供參考裝置使用的硬體裝置使用。

幾乎所有即時應用程式都使用管線的 HAL 實作。 當管線從硬體裝置切換到參考裝置時,轉譯作業會在硬體和軟體中同時完成。 當軟體裝置轉譯時,它需要將資源下載到系統記憶體。 這可能需要收回系統記憶體中快取的其他資源,才能容納空間。

注意

只有 Direct3D 10 和 Direct3D 10.1 才支援這個切換至參考層功能,且 Direct3D 11 和更新版本中不再支援此功能。

 

Thread-Safe層

此層的設計目的是允許多執行緒應用程式從多個執行緒存取裝置。

Direct3D 10 應用程式可以使用裝置功能來控制裝置同步處理。 這可讓應用程式啟用/停用重要區段, (暫時啟用/停用多執行緒保護) ,並在多個 Direct3D 10 API 進入點上取得/釋放重要區段鎖定。 預設會啟用安全線程層。 對於單一執行緒應用程式,安全線程層不會影響效能。

Direct3D 9 與 Direct3D 10 之間的差異:

  • 不同于 Direct3D 9,Direct3D 10 API 預設為完全安全線程。

 

(Direct3D 10) API 功能