Share via


移轉至 Direct3D 11

本節提供從舊版 Direct3D 移轉至 Direct3D 11 的資訊。

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
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRY新增數據流。
D3D10_BLEND_DESC D3D11_BLEND_DESC請注意,此結構已大幅從10變更為10.1,以提供每個轉譯目標混合狀態
D3D10_BUFFER_DESC D3D11_BUFFER_DESC新增 StructureByteStride 以搭配計算著色器資源使用
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESC請注意,此結構已為10.1新增額外的等位成員
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESC有新的 Flags 成員。
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICS新增數個新的著色器階段計數器。
D3D10_x D3D11_x許多結構在兩個 API 之間完全相同。

介面

Direct3D 10 Direct3D 11
ID3D10Device ID3D11DeviceID3D11DeviceContext
裝置介面已分成這兩個部分。 若要快速移植,您可以使用ID3D11Device::GetImmediateContext
“ID3D10Device::GetTextFilterSize” 和 “SetTextFilerSize” 方法已不存在。 請參閱 DirectWrite。
Create*Shader 會採用 ID3D11ClassLinkage 的額外選擇性參數
*SetShader 和 *GetShader 會針對 ID3D11ClassInstance(s) 採取其他選擇性參數
CreateGeometryShaderWithStreamOutput 會採用數位和計數來表示多個輸出數據流的步幅。
CreateGeometryShaderWithStreamOutputNumEntries 參數限制已增加到 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 DirectXTexDirectXTK 和 DirectXMesh 中的 D3DX11 提供舊版 D3DX10 和 D3DX11 連結庫中許多技術的替代方案。
Direct2DDirectWrite 提供轉譯樣式線條和字型的高品質支援。

如需舊版 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_FEATURE_LEVEL1 D3D_FEATURE_LEVEL相同但定義於 D3DCommon.h 加上 11 類別硬體的D3D_FEATURE_LEVEL_11_0,以及 10level9 的D3D_FEATURE_LEVEL_9_1、D3D_FEATURE_LEVEL_9_2和D3D_FEATURE_LEVEL_9_3
(D3D10_FEATURE_LEVEL_9_1、D3D10_FEATURE_LEVEL_9_2和D3D10_FEATURE_LEVEL_9_3也增加了10.1至d3d10_1.h)

結構

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 ID3D11DeviceID3D11DeviceContext
裝置介面已分成這兩個部分。 若要快速移植,您可以使用ID3D11Device::GetImmediateContext
“ID3D10Device::GetTextFilterSize” 和 “SetTextFilerSize” 方法已不存在。 請參閱 DirectWrite。
Create*Shader 會採用 ID3D11ClassLinkage 的額外選擇性參數
*SetShader 和 *GetShader 會針對 ID3D11ClassInstance(s) 採取其他選擇性參數
CreateGeometryShaderWithStreamOutput 會採用數位和計數來表示多個輸出數據流的步幅。
CreateGeometryShaderWithStreamOutputNumEntries 參數限制已增加到 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.2DXGI 1.3 和其他改良功能。

Direct3D 11 的程序設計指南

效果 (Direct3D 11)