Funzionalità direct3D 11.2

Le funzionalità seguenti sono state aggiunte in Direct3D 11.2, incluse in Windows 8.1, Windows RT 8.1 e Windows Server 2012 R2.

Risorse riquadri

Direct3D 11.2 consente di creare risorse riquadri che possono essere considerate come risorse logiche di grandi dimensioni che usano piccole quantità di memoria fisica. Le risorse riquadri sono utili (ad esempio) con terreno nei giochi e nell'interfaccia utente dell'app.

Le risorse riquadri vengono create specificando il flag di D3D11_RESOURCE_MISC_TILED . Per usare la risorsa riquadri, usare queste API:

Per altre informazioni sulle risorse riquadri, vedere Risorse riquadri.

Controllare il supporto delle risorse riquadri

Prima di usare le risorse riquadri, è necessario scoprire se il dispositivo supporta le risorse riquadri. Ecco come verificare la presenza del supporto per le risorse riquadri:

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;
}

Supporto esteso per i dispositivi WARP

Direct3D 11.2 estende il supporto per i dispositivi WARP , creati passando D3D_DRIVER_TYPE_WARP nel parametro DriverType di D3D11CreateDevice. Il renderer software WARP in Direct3D 11.2 aggiunge il supporto completo per il livello di funzionalità Direct3D 11_1, incluse le risorse riquadri, IDXGIDevice3::Trim, superfici BCn condivise, minblend e mapping predefinite. Il supporto doppio nei shader HLSL è stato abilitato anche insieme al supporto per 16x MSAA.

Annotare i comandi grafici

Direct3D 11.2 consente di annotare i comandi grafici con queste API:

Collegamento dello shader HLSL

Windows 8.1 aggiunge compilazione e collegamento separati di shader HLSL, che consente ai programmatori grafici di creare funzioni HLSL precompilate, raggrupparle in librerie e collegarle in shader complete in fase di esecuzione. Si tratta essenzialmente di un equivalente di compilazione, librerie e collegamento separati C/C++ e consente ai programmatori di comporre codice HLSL precompilato quando altre informazioni diventano disponibili per finalizzare il calcolo. Per altre informazioni su come usare il collegamento shader, vedere Uso del collegamento di shader.

Completare questi passaggi per creare un shader finale usando il collegamento dinamico in fase di esecuzione.

Per creare e usare il collegamento shader

  1. Creare un oggetto linker ID3D11Linker , che rappresenta un contesto di collegamento. Non è possibile usare un singolo contesto per produrre più shader; viene usato un contesto di collegamento per produrre un singolo shader e quindi viene eliminato il contesto di collegamento.
  2. Usare D3DLoadModule per caricare e impostare librerie dai BLOB di libreria.
  3. Usare D3DLoadModule per caricare e impostare un BLOB shader di voci oppure creare uno shader FLG.
  4. Usare ID3D11Module::CreateInstance per creare oggetti ID3D11ModuleInstance , quindi chiamare le funzioni su questi oggetti per ribindare le risorse agli slot finali.
  5. Aggiungere le librerie al linker, quindi chiamare ID3D11Linker::Link per produrre codice di byte finale che può quindi essere caricato e usato nel runtime proprio come un shader completamente precompilato e collegato.

Grafico di collegamento delle funzioni (FLG)

Windows 8.1 aggiunge anche il grafico di collegamento delle funzioni (FLG). È possibile usare FLG per costruire shader costituiti da una sequenza di chiamate di funzione precompilate che passano i valori tra loro. Quando si usa FLG, non è necessario scrivere HLSL e richiamare il compilatore HLSL. La struttura shader viene invece specificata a livello di codice usando le chiamate API C++. I nodi FLG rappresentano firme di input e output e chiamate di funzioni di libreria precompilate. L'ordine di registrazione dei nodi di chiamata alla funzione definisce la sequenza di chiamate. Il nodo della firma di input deve essere specificato prima, mentre il nodo della firma di output deve essere specificato l'ultimo. I bordi FLG definiscono il modo in cui i valori vengono passati da un nodo a un altro. I tipi di dati dei valori passati devono essere uguali; non esiste alcuna conversione implicita del tipo. Le regole di forma e scorrimento seguono il comportamento HLSL e i valori possono essere passati solo in avanti in questa sequenza. Per informazioni sull'API FLG, vedere ID3D11FunctionLinkingGraph.

Compilatore HLSL in arrivo

Il compilatore HLSL è ora in arrivo in Windows 8.1 e versioni successive. Ora, la maggior parte delle API per la programmazione shader può essere usata nelle app di Windows Store compilate per Windows 8.1 e versioni successive. Molte API per la programmazione shader non possono essere usate nelle app di Windows Store compilate per Windows 8. Le pagine di riferimento per queste API sono state contrassegnate con una nota. Ma alcune API shader (ad esempio D3DCompileFromFile) possono comunque essere usate solo per sviluppare app di Windows Store e non nelle app inviate a Windows Store; le pagine di riferimento per queste API sono ancora contrassegnate con una nota.

Novità di Direct3D 11