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:

如需並排資源的詳細資訊,請參閱 並排資源

檢查磚資源支援

使用並排顯示的資源之前,您必須瞭解裝置是否支援並排顯示的資源。 以下是您檢查磚資源支援的方式:

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裝置的支援,您可以藉由在D3D11CreateDeviceDriverType參數中傳遞D3D_DRIVER_TYPE_WARP來建立。 Direct3D 11.2 中的 WARP 軟體轉譯器新增 Direct3D 功能層級 11_1 的完整支援,包括 並排資源IDXGIDevice3::Trim、共用 BCn 表面、minblend 和地圖預設值。 HLSL 著色器中的雙重支援也已啟用,並支援 16x MSAA。

標注圖形命令

Direct3D 11.2 可讓您使用下列 API 標注圖形命令:

HLSL 著色器連結

Windows 8.1新增了個別的 HLSL 著色器編譯和連結,這可讓圖形設計人員建立先行編譯的 HLSL 函式、將它們封裝到程式庫,並在執行時間將它們連結至完整的著色器。 這基本上相當於 C/C++ 個別編譯、程式庫和連結,而且當更多資訊可供完成計算時,程式設計人員就可以撰寫先行編譯的 HLSL 程式碼。 如需如何使用著色器連結的詳細資訊,請參閱 使用著色器連結

完成下列步驟,以在執行時間使用動態連結建立最終著色器。

建立和使用著色器連結

  1. 建立 ID3D11Linker 連結器 物件,代表連結內容。 單一內容無法用來產生多個著色器;連結內容可用來產生單一著色器,然後擲回連結內容。
  2. 使用 D3DLoadModule 從其程式庫 Blob 載入和設定程式庫。
  3. 使用 D3DLoadModule 載入和設定專案著色器 Blob,或建立 FLG 著色器
  4. 使用 ID3D11Module::CreateInstance 建立 ID3D11ModuleInstance 物件,然後呼叫這些物件的函式,將資源重新系結至其最終位置。
  5. 將程式庫新增至連結器,然後呼叫 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 的新功能