Funzionalità di Direct3D 11.1

In Direct3D 11.1 sono state aggiunte le funzionalità seguenti, incluse in Windows 8, Windows RT e Windows Server 2012. Il supporto parziale per Direct3D 11.1 è disponibile in Windows 7 e Windows Server 2008 R2 tramite l'aggiornamento della piattaforma per Windows 7, disponibile tramite Platform Update per Windows 7.

Miglioramenti della traccia e del compilatore shader

Direct3D 11.1 consente di usare la traccia dello shader per assicurarsi che il codice funzioni come previsto e, se non è possibile individuare e risolvere il problema. Windows Software Development Kit (SDK) per Windows 8 contiene miglioramenti del compilatore HLSL. La traccia shader e il compilatore HLSL vengono implementati in D3dcompiler_nn.dll.

L'API di traccia shader e i miglioramenti apportati al compilatore HLSL sono costituiti dai metodi e dalle funzioni seguenti.

La libreria D3dcompiler.lib richiede D3dcompiler_nn.dll. Questa DLL non fa parte di Windows 8; si trova nella cartella \bin di Windows SDK per Windows 8 insieme alla versione della riga di comando Fxc.exe del compilatore HLSL.

Nota

Sebbene sia possibile usare questa combinazione di libreria e DLL per lo sviluppo, non è possibile distribuire app di Windows Store che usano questa combinazione. È quindi necessario compilare gli shader HLSL prima di spedire l'app di Windows Store. È possibile scrivere file binari di compilazione HLSL su disco oppure il compilatore può generare intestazioni con matrici di byte statiche contenenti i dati del BLOB shader. Usare l'interfaccia ID3DBlob per accedere ai dati del BLOB. Per sviluppare l'app di Windows Store, chiamare D3DCompile2 o D3DCompileFromFile per compilare l'origine HLSL non elaborata e quindi inserire i dati del BLOB risultanti in Direct3D.

 

Condivisione di dispositivi Direct3D

Direct3D 11.1 abilita le API Direct3D 10 e le API Direct3D 11 per usare un dispositivo di rendering sottostante.

Questa funzionalità Direct3D 11.1 è costituita dai metodi e dall'interfaccia seguenti.

Controllare il supporto delle nuove funzionalità e formati di Direct3D 11.1

Direct3D 11.1 consente di verificare la presenza di nuove funzionalità che il driver grafico potrebbe supportare e nuovi modi in cui un formato è supportato in un dispositivo. Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 specifica anche nuovi valori DXGI_FORMAT .

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Usare la precisione minima HLSL

A partire da Windows 8, i driver grafici possono implementare tipi di dati scalari HLSL con precisione minima usando qualsiasi precisione maggiore o uguale alla precisione di bit specificata. Quando il codice dello shader di precisione minima HLSL viene usato nell'hardware che implementa la precisione minima HLSL, si usa meno larghezza di banda di memoria e di conseguenza si usa una minore potenza di sistema.

È possibile eseguire una query per ottenere il supporto di precisione minimo fornito dal driver grafico chiamando ID3D11Device::CheckFeatureSupport con il valore D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . In questa chiamata ID3D11Device::CheckFeatureSupport passare un puntatore a una struttura D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT che ID3D11Device::CheckFeatureSupport riempie con i livelli di precisione minimi supportati dal driver per la fase del pixel shader e per altre fasi dello shader. Le informazioni restituite indicano solo che l'hardware grafico può eseguire operazioni HLSL con una precisione inferiore rispetto alla precisione float standard a 32 bit, ma non garantisce che l'hardware grafico venga effettivamente eseguito con una precisione inferiore.

Non è necessario creare più shader che e non usano la precisione minima. Creare invece shader con precisione minima e le variabili di precisione minima si comportano con precisione completa a 32 bit se il driver grafico segnala che non supporta alcuna precisione minima. Per altre informazioni sulla precisione minima HLSL, vedi Uso della precisione minima HLSL.

Gli shader con precisione minima HLSL non funzionano nei sistemi operativi precedenti a Windows 8.

Specificare i piani clip utente in HLSL al livello di funzionalità 9 e superiore

A partire da Windows 8, è possibile usare l'attributo della funzione clipplanes in una dichiarazione di funzione HLSL anziché SV_ClipDistance per rendere il lavoro dello shader a livello di funzionalità 9_x nonché il livello di funzionalità 10 e superiore. Per altre info, vedi Piani clip utente su hardware di livello 9.

Creare buffer costanti di dimensioni maggiori rispetto a uno shader accessibile

Direct3D 11.1 consente di creare buffer costanti superiori alle dimensioni massime del buffer costante a cui può accedere uno shader (4096 costanti a 32 bit*4 componenti - 64 KB). Successivamente, quando si associano i buffer alla pipeline, ad esempio tramite PSSetConstantBuffers o PSSetConstantBuffers1, è possibile specificare un intervallo di buffer a cui lo shader può accedere entro il limite di 4096.

Direct3D 11.1 aggiorna il metodo ID3D11Device::CreateBuffer per questa funzionalità.

Usare le operazioni logiche in una destinazione di rendering

Direct3D 11.1 consente di usare operazioni logiche invece di fondersi in una destinazione di rendering. Non è tuttavia possibile combinare le operazioni logiche con la fusione tra più destinazioni di rendering.

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Forzare il conteggio dei campioni per creare uno stato di rasterizzazione

Direct3D 11.1 consente di specificare un numero di campioni forzati quando si crea uno stato rasterizzatore.

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Nota

Se si vuole eseguire il rendering con il numero di campioni forzato a 1 o versione successiva, è necessario seguire queste linee guida:

  • Non associare le visualizzazioni di profondità-stencil.
  • Disabilitare i test di profondità.
  • Assicurarsi che lo shader non restituisca la profondità di output.
  • Se si dispone di visualizzazioni di destinazione di rendering (D3D11_BIND_RENDER_TARGET) e il conteggio degli esempi è maggiore di 1, assicurarsi che ogni destinazione di rendering disponga solo di un singolo esempio.
  • Non operare lo shader in corrispondenza della frequenza di esempio. Pertanto, ID3D11ShaderReflection::IsSampleFrequencyShader restituisceFALSE.

In caso contrario, il comportamento di rendering non è definito. Per informazioni su come configurare lo stencil di profondità, vedere Configurazione della funzionalità Depth-Stencil.

 

Elaborare le risorse video con shader

Direct3D 11.1 consente di creare visualizzazioni (SRV/RTV/UAV) alle risorse video in modo che gli shader Direct3D possano elaborare tali risorse video. Il formato di una risorsa video sottostante limita i formati che la visualizzazione può usare. L'enumerazione DXGI_FORMAT contiene nuovi valori di formato risorsa video. Questi valori DXGI_FORMAT specificano i formati di visualizzazione validi che è possibile creare e come il runtime Direct3D 11.1 esegue il mapping della visualizzazione. È possibile creare più visualizzazioni di diverse parti della stessa superficie e a seconda del formato, le dimensioni delle visualizzazioni possono essere diverse tra loro.

Direct3D 11.1 aggiorna i metodi seguenti per questa funzionalità.

Supporto esteso per le risorse texture2D condivise

Direct3D 11.1 garantisce che sia possibile condividere le risorse Texture2D create con tipi e formati di risorse specifici. Per condividere le risorse Texture2D, usare i flag D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX o una combinazione dei flag di D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEXe D3D11_RESOURCE_MISC_SHARED_NTHANDLE (nuovi per Windows 8) quando si creano tali risorse.

Direct3D 11.1 garantisce che sia possibile condividere le risorse Texture2D create con questi valori DXGI_FORMAT :

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

Inoltre, Direct3D 11.1 garantisce che sia possibile condividere le risorse Texture2D create con un livello di mipmap pari a 1, dimensioni della matrice pari a 1, flag di associazione di D3D11_BIND_SHADER_RESOURCE e D3D11_BIND_RENDER_TARGET combinati, impostazione predefinita di utilizzo (D3D11_USAGE_DEFAULT) e solo questi valori D3D11_RESOURCE_MISC_FLAG:

Direct3D 11.1 consente di condividere un'ampia gamma di tipi e formati di risorse Texture2D. È possibile eseguire una query su se il driver grafico e l'hardware supportano la condivisione delle risorse Texture2D estesa chiamando ID3D11Device::CheckFeatureSupport con il valore D3D11_FEATURE_D3D11_OPTIONS . In questa chiamata ID3D11Device::CheckFeatureSupport passare un puntatore a una struttura di D3D11_FEATURE_DATA_D3D11_OPTIONS . ID3D11Device::CheckFeatureSupport imposta il membro ExtendedResourceSharing di D3D11_FEATURE_DATA_D3D11_OPTIONSsu TRUE se l'hardware e il driver supportano la condivisione di risorse Texture2D estesa.

Se ID3D11Device::CheckFeatureSupport restituisce TRUE in ExtendedResourceSharing, è possibile condividere le risorse create con questi valori di DXGI_FORMAT :

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

Se ID3D11Device::CheckFeatureSupport restituisce TRUE in ExtendedResourceSharing, è possibile condividere le risorse create con queste funzionalità e flag:

Nota

Quando ExtendedResourceSharing è TRUE, si ha maggiore flessibilità quando si specificano flag di associazione per la condivisione delle risorse Texture2D. Non solo il driver grafico e l'hardware supportano più flag di associazione, ma anche combinazioni più possibili di flag di associazione. Ad esempio, è possibile specificare solo D3D11_BIND_RENDER_TARGET o nessun flag di associazione e così via.

 

Anche se ID3D11Device::CheckFeatureSupport restituisce TRUE in ExtendedResourceSharing, non è comunque possibile condividere le risorse create con queste funzionalità e flag:

Modificare le sottorisorse con nuove opzioni di copia

Direct3D 11.1 consente di usare nuovi flag di copia per copiare e aggiornare le sottorisorse. Quando si copia una sottorisorsa, le risorse di origine e di destinazione possono essere identiche e le aree di origine e di destinazione possono sovrapporsi.

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Eliminare le risorse e le visualizzazioni delle risorse

Direct3D 11.1 consente di eliminare le risorse e le visualizzazioni delle risorse dal contesto di dispositivo. Questa nuova funzionalità informa la GPU che il contenuto esistente nelle risorse o nelle visualizzazioni delle risorse non è più necessario.

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Supportare un numero maggiore di UAV

Direct3D 11.1 consente di usare un numero maggiore di UAV quando si associano risorse alla fase di fusione dell'output e quando si imposta una matrice di visualizzazioni per una risorsa non ordinata.

Direct3D 11.1 aggiorna i metodi seguenti per questa funzionalità.

Associare un sottoinsieme di un buffer costante a uno shader

Direct3D 11.1 consente di associare un sottoinsieme di un buffer costante a cui accedere uno shader. È possibile specificare un buffer costante più grande e specificare il sottoinsieme utilizzabile dallo shader.

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Recuperare il sottoinsieme di un buffer costante associato a uno shader

Direct3D 11.1 consente di recuperare l'intervallo secondario di un buffer costante associato a uno shader.

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Cancellare tutto o parte di una visualizzazione risorse

Direct3D 11.1 consente di cancellare una visualizzazione risorse (RTV, UAV o qualsiasi visualizzazione video di una superficie Texture2D). Applicare lo stesso valore di colore a tutte le parti della visualizzazione.

Questa funzionalità Direct3D 11.1 è costituita dall'API seguente.

Eseguire il mapping di SRV di buffer dinamici con NO_OVERWRITE

Direct3D 11.1 consente di eseguire il mapping delle visualizzazioni delle risorse shader (SRV) di buffer dinamici con D3D11_MAP_WRITE_NO_OVERWRITE. Direct3D 11 e versioni precedenti limitano il mapping ai vertex buffer o ai buffer di indice.

Direct3D 11.1 aggiorna il metodo ID3D11DeviceContext::Map per questa funzionalità.

Usare UAV in ogni fase della pipeline

Direct3D 11.1 consente di usare le istruzioni del modello di shader 5.0 seguenti in tutte le fasi dello shader usate in precedenza nei soli pixel shader e negli shader di calcolo.

Direct3D 11.1 aggiorna i metodi seguenti per questa funzionalità.

Queste istruzioni esistono in Direct3D 11.0 in ps_5_0 e cs_5_0. Poiché Direct3D 11.1 rende disponibili UAV in tutte le fasi dello shader, queste istruzioni sono disponibili in tutte le fasi dello shader.

Se si passano shader compilati (VS/HS/DS/HS) che usano una di queste istruzioni a una funzione create-shader, ad esempio CreateVertexShader, nei dispositivi che non supportano UAV in ogni fase (inclusi i driver esistenti non implementati con questa funzionalità), la funzione create-shader ha esito negativo. La funzione create-shader ha esito negativo anche se lo shader tenta di usare uno slot UAV oltre il set di slot UAV supportati dall'hardware.

Le UAV a cui fanno riferimento queste istruzioni vengono condivise in tutte le fasi della pipeline. Ad esempio, un UAV associato allo slot 0 nella fase di fusione dell'output è disponibile nello slot 0 a VS/HS/DS/GS/PS.

Gli accessi UAV che si eseguono all'interno o nelle fasi dello shader eseguiti all'interno di una determinata funzione Draw*() o che si esegue dal compute shader all'interno di un dispatch*() non sono garantiti per completare l'ordine in cui sono stati emessi. Tuttavia, tutti gli accessi UAV terminano alla fine di Draw*() o Dispatch*().

Supporto esteso per i dispositivi WARP

Direct3D 11.1 estende il supporto per i dispositivi WARP , creati passando D3D_DRIVER_TYPE_WARP nel parametro DriverType di D3D11CreateDevice.

A partire dal supporto dei dispositivi WARP Direct3D 11.1:

I dispositivi WARP non supportano queste funzionalità facoltative:

Quando si esegue una macchina virtuale (VM), Hyper-V, con l'unità di elaborazione grafica (GPU) disabilitata o senza un driver di visualizzazione, si ottiene un dispositivo WARP il cui nome descrittivo è "Scheda schermo Di base Microsoft". Questo dispositivo WARP può eseguire l'esperienza completa di Windows, che include app DWM, Internet Explorer e Windows Store. Questo dispositivo WARP supporta anche l'esecuzione di app legacy che usano DirectDraw o che eseguono app che usano Direct3D 3 a Direct3D 11.1.

Usare Direct3D nei processi della sessione 0

A partire da Windows 8 e Windows Server 2012, è possibile usare la maggior parte delle API Direct3D nei processi sessione 0.

 

Supporto per il buffer shadow a livello di funzionalità 9

Usare un subset di funzionalità del buffer shadow Direct3D 10_0+ per implementare effetti shadow a livello di funzionalità 9_x. Per informazioni su ciò che è necessario eseguire per implementare effetti shadow a livello di funzionalità 9_x, vedere Implementazione di buffer shadow per il livello di funzionalità Direct3D 9.

Novità di Direct3D 11