Direct3D 11.2 功能
Direct3D 11.2 已新增下列功能,隨附於 Windows 8.1、Windows RT 8.1 和 Windows Server 2012 R2 中。
並排顯示的資源
Direct3D 11.2 可讓您建立磚化資源,其可視為使用少量物理記憶體的大型邏輯資源。 磚資源在遊戲和應用程式UI中具有地形很有用(例如)。
藉由指定 D3D11_RESOURCE_MISC_TILED 旗標來建立並排顯示的資源。 若要使用並排顯示的資源,請使用下列 API:
- ID3D11Device2::GetResourceTiling
- ID3D11DeviceContext2::UpdateTiles
- ID3D11DeviceContext2::UpdateTileMappings
- ID3D11DeviceContext2::CopyTiles
- ID3D11DeviceContext2::CopyTileMappings
- ID3D11DeviceContext2::ResizeTilePool
- ID3D11DeviceContext2::TiledResourceBarrier
- 具有 ID3D11Debug::SetFeatureMask 的 D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION 旗標
如需磚資源的詳細資訊,請參閱 磚資源。
檢查磚資源支援
使用磚資源之前,您必須瞭解裝置是否支援並排顯示的資源。 以下是您檢查磚資源支援的方式:
HRESULT hr = D3D11CreateDevice(
nullptr, // Specify nullptr to use the default adapter.
D3D_DRIVER_TYPE_HARDWARE, // Create a device using the hardware graphics driver.
0, // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE.
creationFlags, // Set debug and Direct2D compatibility flags.
featureLevels, // List of feature levels this app can support.
ARRAYSIZE(featureLevels), // Size of the list above.
D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION for Windows Store apps.
&device, // Returns the Direct3D device created.
&m_d3dFeatureLevel, // Returns feature level of device created.
&context // Returns the device immediate context.
);
if (SUCCEEDED(hr))
{
D3D11_FEATURE_DATA_D3D11_OPTIONS1 featureData;
DX::ThrowIfFailed(
device->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &featureData, sizeof(featureData))
);
m_tiledResourcesTier = featureData.TiledResourcesTier;
}
WARP 裝置的延伸支援
Direct3D 11.2 延伸對 WARP 裝置的支援,您可以在 D3D11CreateDevice的 DriverType 參數中傳遞 D3D_DRIVER_TYPE_WARP。 Direct3D 11.2 中的 WARP 軟體轉譯器新增 Direct3D 功能層級的完整支援, 11_1,包括 磚資源、IDXGIDevice3::Trim、共用 BCn 表面、minblend 和 map 預設值。 HLSL 著色器中的 Double 支援也已啟用,並支援 16x MSAA。
標註圖形命令
Direct3D 11.2 可讓您使用這些 API 標註圖形命令:
- ID3D11DeviceContext2::IsAnnotationEnabled
- ID3D11DeviceContext2::BeginEventInt
- ID3D11DeviceContext2::SetMarkerInt
- ID3D11DeviceContext2::EndEvent
HLSL 著色器連結
Windows 8.1 新增了 HLSL 著色器的個別編譯和連結,讓圖形設計人員能夠建立先行編譯的 HLSL 函式、將它們封裝成連結庫,並在運行時間將它們連結至完整的著色器。 這基本上相當於 C/C++個別的編譯、連結庫和連結,而且它可讓程式設計人員撰寫預先編譯的 HLSL 程式代碼,當更多資訊可供完成計算時。 如需如何使用著色器連結的詳細資訊,請參閱使用著色器連結 。
完成這些步驟,以在運行時間使用動態連結建立最終著色器。
建立和使用著色器連結
- 建立 ID3D11Linker 連結器物件,代表鏈接內容。 單一內容無法用來產生多個著色器;鏈接內容是用來產生單一著色器,然後會擲回連結內容。
- 使用 D3DLoadModule,從其連結庫 Blob 載入和設定連結庫。
- 使用 D3DLoadModule 載入和設定專案著色器 Blob,或建立 FLG 著色器。
- 使用 ID3D11Module::CreateInstance 建立 ID3D11ModuleInstance 物件,然後呼叫這些物件的函式,將資源重新系結至其最終位置。
- 將連結庫新增至連結器,然後呼叫 ID3D11Linker::Link,以產生最終的著色器位元組程式代碼,然後載入並用於運行時間,就像完全先行編譯和連結著色器一樣。
函式連結圖 (FLG)
Windows 8.1 也會新增函式連結圖形 (FLG)。 您可以使用 FLG 來建構著色器,其中包含一連串的先行編譯函式調用,這些調用會將值傳遞至彼此。 使用 FLG 時,不需要寫入 HLSL 並叫用 HLSL 編譯程式。 而是使用 C++ API 呼叫,以程式設計方式指定著色器結構。 FLG 節點代表先行編譯連結庫函式的輸入和輸出簽章和調用。 註冊函式呼叫節點的順序會定義調用序列。 必須先指定輸入簽章節點,而輸出簽章節點必須最後指定。 FLG 邊緣會定義值如何從某個節點傳遞至另一個節點。 傳遞值的數據類型必須相同;沒有隱含類型轉換。 圖形和令人眼花繚亂的規則遵循 HLSL 行為,而且值只能在此序列中向前傳遞。 如需 FLG API 的詳細資訊,請參閱 ID3D11FunctionLinkingGraph。
收件匣 HLSL 編譯程式
HLSL 編譯程式現在是 Windows 8.1 和更新版本的收件匣。 現在,著色器程序設計的大部分 API 都可以用於針對 Windows 8.1 和更新版本建置的 Windows 市集應用程式中。 許多用於著色器程序設計的 API 無法在針對 Windows 8 建置的 Windows 市集應用程式中使用;這些 API 的參考頁面已標示為附註。 但某些著色器 API(例如,D3DCompileFromFile)仍只能用來開發 Windows 市集應用程式,而不是在您提交至 Windows 市集的應用程式中;這些 API 的參考頁面仍會以附註標示。
相關主題
-
Direct3D 11 的新功能