移轉至 Direct3D 11
本節提供從舊版 Direct3D 移轉至 Direct3D 11 的資訊。
- Direct3D 9 至 Direct3D 11
- Direct3D 10 至 Direct3D 11
- Direct3D 10.1 至 Direct3D 11
- Direct3D 11 的新功能
- DirectX 11.1 的新功能
- DirectX 11.2 的新功能
- 相關主題
Direct3D 9 至 Direct3D 11
Direct3D 11 API 是以 Direct3D 10 和 10.1 中所做的基礎結構改進為基礎。 從 Direct3D 9 移植到 Direct3D 11 類似於從 Direct3D 9 移轉至 Direct3D 10。 以下是這項工作的主要挑戰。
- 拿掉所有固定函式管線使用方式,有利於以 HLSL 獨佔方式撰寫的可程式著色器(透過 D3DCompiler 編譯,而不是 D3DX9 編譯)。
- 以不可變物件為基礎的狀態管理,而不是個別狀態切換。
- 更新以符合頂點緩衝區輸入配置和著色器簽章的嚴格連結需求。
- 將著色器資源檢視與所有紋理資源產生關聯。
- 將所有影像內容對應至DXGI_FORMAT,包括移除所有 24 位色彩格式(8/8/8),以及大部分案例的嚴格 RGB 色彩順序。
- 將全域常數狀態使用分成數個小型且更有效率的常數緩衝區。
如需從 Direct3D 9 移至 Direct3D 10 的詳細資訊,請參閱 Direct3D 9 至 Direct3D 10 考慮。
Direct3D 10 至 Direct3D 11
轉換寫入使用 Direct3D 10 或 10.1 API 的程式是一個直接的程式,因為 Direct3D 11 是現有 API 的延伸模組。 只有一個次要例外狀況(如下所述 - 單色文字篩選),Direct3D 10/10.1 中的所有方法和功能都可在 Direct3D 11 中使用。 下列概述說明兩個 API 之間的差異,以協助更新現有的程式代碼。 此處的主要差異包括:
- 轉譯作業(Draw、state 等)已不再是 Device 介面的一部分,而是新的 DeviceContext 介面以及資源 Map/Unmap 和裝置查詢方法的一部分。
- Direct3D 11 包含 Direct3D 10.0 與 10.1 之間所做的所有增強功能和變更
列舉和定義
Direct3D 10 | Direct3D 11 |
---|---|
DXGI_FORMAT | DXGI_FORMAT已定義數個新的 DXGI 格式。 |
D3D10_CREATE_DEVICE_SWITCH_TO_REF | D3D11_CREATE_DEVICE_SWITCH_TO_REF Direct3D 11 不支援切換至 ref 功能。 |
D3D10_DRIVER_TYPE | D3D_DRIVER_TYPE 請注意,D3D_DRIVER_TYPE中的列舉標識碼已從 D3D10_DRIVER_TYPE 中的標識元重新定義。 因此,您應該務必使用列舉標識符,而不是常值數位。 D3D_DRIVER_TYPE定義於 D3Dcommon.h 中。 |
D3D10_RESOURCE_MISC_FLAG | D3D11_RESOURCE_MISC_FLAG 請注意,其中許多旗標都已重新定義,因此請務必使用列舉標識符,而不是常值數位。 |
D3D10_FILTER | D3D11_FILTER請注意,文字篩選D3D10_FILTER_TEXT_1BIT已從 Direct3D 11 中移除。 請參閱 DirectWrite。 |
D3D10_COUNTER | D3D11_COUNTER 請注意,Direct3D 11 已移除廠商中性計數器,因為它們很少受到支援。 |
D3D10_x | D3D11_x許多列舉和定義都相同、具有較大的限制或具有其他值。 |
結構
介面
Direct3D 10 | Direct3D 11 |
---|---|
ID3D10Device | ID3D11Device 和 ID3D11DeviceContext 裝置介面已分成這兩個部分。 若要快速移植,您可以使用ID3D11Device::GetImmediateContext。 “ID3D10Device::GetTextFilterSize” 和 “SetTextFilerSize” 方法已不存在。 請參閱 DirectWrite。 Create*Shader 會採用 ID3D11ClassLinkage 的額外選擇性參數。 *SetShader 和 *GetShader 會針對 ID3D11ClassInstance(s) 採取其他選擇性參數。 CreateGeometryShaderWithStreamOutput 會採用數位和計數來表示多個輸出數據流的步幅。 CreateGeometryShaderWithStreamOutput 的 NumEntries 參數限制已增加到 Direct3D 11 中的 D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT。 |
ID3D10Buffer | ID3D11Buffer |
ID3D10SwitchToRef | Direct3D 11 不支援 ID3D11SwitchToRefSwitch-to-ref 功能。 |
ID3D10Texture1D | ID3D11Texture1D |
ID3D10Texture2D | ID3D11Texture2D |
ID3D10Texture3D | ID3D11Texture3D Map 和 Unmap 方法已移至 ID3D11DeviceContext,而所有 Map 方法都會使用 D3D11_MAPPED_SUBRESOURCE 而不是 void**。 |
ID3D10Asynchronous | ID3D11Asynchronous Begin、End 和 GetData 已移至 ID3D11DeviceContext。 |
ID3D10x | ID3D11x 兩個 API 之間的許多介面都相同。 |
其他相關技術
10/10.1 解決方案 | 11 解決方案 |
---|---|
HLSL 編譯程式 (D3D10Compile*, D3DX10Compile*) 和著色器反映 API | D3DCompiler (請參閱 D3DCompiler.h) 附注: 針對 Windows 市集應用程式, 僅支援 D3DCompiler API 進行開發,而不是部署。 |
效果 10 | 效果 11 可在在線以共用來源的形式提供。 注意: 此解決方案不適用於 Windows 市集應用程式,因為它需要 運行時間 (deployment) 的 D3DCompiler API 。 |
D3DX9/D3DX10 數學 | DirectXMath |
D3DX10 | 舊版 DirectX SDK DirectXTex、DirectXTK 和 DirectXMesh 中的 D3DX11 提供舊版 D3DX10 和 D3DX11 連結庫中許多技術的替代方案。 Direct2D 和 DirectWrite 提供轉譯樣式線條和字型的高品質支援。 |
如需舊版 DirectX SDK 的相關信息,請參閱 DirectX SDK 的位置?。
Direct3D 10.1 至 Direct3D 11
Direct3D 10.1 是 Direct3D 10 介面的延伸模組,Direct3D 10.1 的所有功能都可在 Direct3D 11 中使用。 大部分從 10.1 移植到 11 的地址已經從 10 移轉至 11。
列舉和定義
結構
Direct3D 10.1 | Direct3D 11 |
---|---|
D3D10_BLEND_DESC1 | D3D11_BLEND_DESC 11 版本與 10.1 相同。 |
D3D10_SHADER_RESOURCE_VIEW_DESC1 | D3D11_SHADER_RESOURCE_VIEW_DESC 11 版本與 10.1 相同。 |
介面
Direct3D 10.1 | Direct3D 11 |
---|---|
ID3D10Device1 | ID3D11Device 和 ID3D11DeviceContext 裝置介面已分成這兩個部分。 若要快速移植,您可以使用ID3D11Device::GetImmediateContext。 “ID3D10Device::GetTextFilterSize” 和 “SetTextFilerSize” 方法已不存在。 請參閱 DirectWrite。 Create*Shader 會採用 ID3D11ClassLinkage 的額外選擇性參數。 *SetShader 和 *GetShader 會針對 ID3D11ClassInstance(s) 採取其他選擇性參數。 CreateGeometryShaderWithStreamOutput 會採用數位和計數來表示多個輸出數據流的步幅。 CreateGeometryShaderWithStreamOutput 的 NumEntries 參數限制已增加到 Direct3D 11 中的 D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT。 |
ID3D10BlendState1 | ID3D11BlendState |
ID3D10ShaderResourceView1 | ID3D11ShaderResourceView |
Direct3D 11 的新功能
一旦程式代碼更新為使用 Direct3D 11 API,就會考慮許多 新功能 。
- 透過命令清單和多個內容進行多線程轉譯
- 使用計算著色器實作進階演算法(使用 4.0、4.1 或 5.0 著色器設定檔)
- 新的 11 個類別硬體功能:
- HLSL 著色器模型 5.0
- 動態著色器連結
- 透過赫爾和網域著色器鑲嵌
- 新的區塊壓縮格式:適用於 HDR 影像的 BC6H、適用於較高逼真度標準影像的 BC7
- 利用 10level9 技術,透過 DIrect3D 11 API 在 Windows Vista 和 Windows 7 上透過 DIrect3D 11 API 在許多著色器模型 2.0 和著色器模型 3.0 裝置上進行轉譯。
- 利用 WARP 軟體轉譯裝置。
DirectX 11.1 的新功能
Windows 8 包含當您實作 DirectX 圖形程式代碼時要考慮的進一步 DirectX 圖形增強功能,其中包括 Direct3D 11.1、DXGI 1.2、Windows Display Driver Model (WDDM) 1.2、功能層級 11.1 硬體、Direct2D 裝置內容和其他改善。
Windows 7 上提供 Direct3D 11.1 的部分支援,以及透過適用於 Windows 7 的平臺更新提供,可透過適用於 Windows 7 的平臺更新取得。
DirectX 11.2 的新功能
Windows 8.1 包含 Direct3D 11.2、 DXGI 1.3 和其他改良功能。