Condividi tramite


Funzionalità di Direct3D 11.1

La funzionalità seguente è stata aggiunta in Direct3D 11.1, inclusa 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 Platform Update 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 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 \bin folder of the Windows SDK for Windows 8 along with the Fxc.exe versione della riga di comando 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. Pertanto, è 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'interfacciaID3DBlobper accedere ai dati BLOB. Per sviluppare l'app di Windows Store, chiama 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 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 di DXGI_FORMAT.

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

Usare la precisione minima di HLSL

A partire da Windows 8, i driver grafici possono implementare la precisione minima tipi di dati scalari HLSL 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 una larghezza di banda di memoria inferiore e di conseguenza si usa una minore potenza di sistema.

È possibile eseguire una query per ottenere il supporto minimo della precisione fornito dal driver grafico chiamando ID3D11Device::CheckFeatureSupport con il valore D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT. In questo ID3D11Device::CheckFeatureSupport chiamata, 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 eseguono e non usare 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 di precisione minima HLSL.

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

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

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

Creare buffer costanti più grandi rispetto a uno shader accessibile

Direct3D 11.1 consente di creare buffer costanti maggiori delle dimensioni massime del buffer costanti 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 può accedere lo shader entro il limite 4096.

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

Usare operazioni logiche in una destinazione di rendering

Direct3D 11.1 consente di usare operazioni logiche invece di fondersi in una destinazione di rendering. Tuttavia, non è 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 conteggio dei campioni di forza quando si crea uno stato di rasterizzatore.

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

Nota

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

  • Non associare visualizzazioni depth-stencil.
  • Disabilitare il test di profondità.
  • Assicurarsi che lo shader non restituisca profondità.
  • Se sono associate viste di destinazione di rendering (D3D11_BIND_RENDER_TARGET) e il conteggio dei campioni è stato forzato a un valore maggiore di 1, assicurarsi che ogni destinazione di rendering abbia un solo campione.
  • Non usare lo shader alla frequenza di campionamento. Pertanto, ID3D11ShaderReflection::IsSampleFrequencyShader restituisce FALSE.

In caso contrario, il comportamento di rendering non è definito. Per informazioni su come configurare depth-stencil, vedere Configuring Depth-Stencil Functionality.

 

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 differire l'una dall'altra.

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_KEYEDMUTEXo una combinazione dei flag D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX e D3D11_RESOURCE_MISC_SHARED_NTHANDLE (nuovo 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 mipmap pari a 1, le dimensioni della matrice pari a 1, associare i flag di D3D11_BIND_SHADER_RESOURCE e D3D11_BIND_RENDER_TARGET combinati, l'utilizzo predefinito (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 per verificare 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 questo ID3D11Device::CheckFeatureSupport chiamata, passare un puntatore a una struttura D3D11_FEATURE_DATA_D3D11_OPTIONS. ID3D11Device::CheckFeatureSupport imposta il membro ExtendedResourceSharing di D3D11_FEATURE_DATA_D3D11_OPTIONS su TRUE se l'hardware e il driver supportano la condivisione delle 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, è possibile specificare flag di associazione per la condivisione delle risorse Texture2D. Non solo il driver grafico e l'hardware supportano più flag di associazione, ma anche più possibili combinazioni 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 risorse e viste delle risorse

Direct3D 11.1 consente di rimuovere risorse e visualizzazioni delle risorse dal contesto di dispositivo. Questa nuova funzionalità indica alla 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 unione di 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 intervallo secondario di un buffer costante per l'accesso a uno shader. È possibile fornire un buffer costante più grande e specificare l'intervallo secondario che il shader può usare.

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

Recuperare l'intervallo secondario 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 delle risorse (RTV, UAV o qualsiasi visualizzazione video di una superficie Texture2D). Si applica 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 dello shader (SRV) di buffer dinamici con D3D11_MAP_WRITE_NO_OVERWRITE. I runtime Direct3D 11 e precedenti limitano il mapping ai vertex 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 in pixel shader e compute shader.

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/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 unione di output è disponibile nello slot 0 a VS/HS/DS/GS/PS.

Gli accessi UAV che si eseguono dall'interno o dall'altra fasi dello shader eseguite all'interno di un determinato draw*() o che si esegue dal compute shader all'interno di un dispatch*() non sono garantiti il completamento nell'ordine in cui sono stati emessi. Tuttavia, tutti gli accessi UAV terminano alla fine del 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:

  • Tutti i livelli di funzionalità Direct3D da 9.1 a 11.1
  • di calcolo e tassellatura
  • Superfici condivise. Ciò significa che è possibile condividere completamente le superfici tra i dispositivi WARP, nonché tra i dispositivi WARP in processi diversi.

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 è "Adattatore schermo Di base Microsoft". Questo dispositivo WARP può eseguire l'esperienza di Windows completa, 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 della sessione 0.

 

Supporto per il buffer shadow al livello di funzionalità 9

Usare un subset di funzionalità del buffer shadow Direct3D 10_0+ per implementare effetti di ombreggiatura su livello di funzionalità 9_x. Per informazioni sulle operazioni da eseguire per implementare effetti di ombreggiatura a livello di funzionalità 9_x, vedi Implementazione di buffer shadow per il livello di funzionalità Direct3D 9.

Novità di Direct3D 11