Livello di funzionalità di Direct3D 12 Core 1.0

Il livello di funzionalità Core 1.0 è un subset del set di funzionalità Direct3D 12 completo. Il livello di funzionalità Core 1.0 può essere esposto da una categoria di dispositivi noti come dispositivi di sola calcolo. Il modello di driver complessivo per i dispositivi di sola calcolo è microsoft Compute Driver Model (MCDM). MCDM è un peer con scalabilità ridotta di Windows Device Driver Model (WDDM), che ha un ambito più ampio.

Un dispositivo che supporta solo le funzionalità all'interno di un livello di funzionalità principale è noto come dispositivo Core.

Nota

Il dispositivo solo di calcolo, il dispositivo MCDM, il dispositivo Core Feature Level e il dispositivo Core significano tutte la stessa cosa. Preferiamo il dispositivo Core per semplicità.

Creazione di un dispositivo Core

In generale, per creare un dispositivo Direct3D 12, chiamare la funzione D3D12CreateDevice e specificare un livello di funzionalità minimo.

Se si specifica un livello di funzionalità compreso tra 9 e 12, il dispositivo restituito è un dispositivo ricco di funzionalità, ad esempio una GPU tradizionale (che supporta un superset delle funzionalità di un dispositivo Core). Un dispositivo Core non viene mai restituito per tale intervallo di livelli di funzionalità.

D'altra parte, se si specifica un livello di funzionalità Core (ad esempio, D3D_FEATURE_LEVEL::D 3D_FEATURE_LEVEL_1_0_CORE), il dispositivo restituito potrebbe essere ricco di funzionalità o potrebbe essere un dispositivo Core.

// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000

Se si specifica un _CORE livello di funzionalità, il livello di runtime/debug verifica che le funzionalità usate dall'applicazione siano consentite da tale _CORE livello di funzionalità. Questo set di funzionalità viene definito più avanti in questo argomento.

Modello shader per i dispositivi Core

Un dispositivo Core supporta il modello shader 5.0+.

Il runtime esegue la conversione di modelli di shader 5.x non DXIL a 6.0 DXIL. Il driver deve quindi supportare solo la versione 6.x.

Modello di gestione delle risorse per i dispositivi Core

  • Dimensioni delle risorse supportate: buffer non elaborati e strutturati (nessun buffer tipizzato, texture1d/2D e così via)
  • Nessun supporto per le risorse riservate (affiancate)
  • Nessun supporto per heap personalizzati
  • Nessun supporto per uno di questi flag heap:
    • D3D12_HEAP_FLAG_HARDWARE_PROTECTED
    • D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
    • D3D12_HEAP_FLAG_ALLOW_DISPLAY
    • D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (sono necessari atomici dello shader, questo flag è per un'altra funzionalità, atomici tra schede)

Modello di associazione di risorse per i dispositivi Core

  • Supporto solo per il livello 1 di associazione di risorse
  • Eccezioni:
    • Nessun supporto per gli esempi di trame
    • Supporto per 64 UAV come il livello di funzionalità 11.1+ (anziché solo 8)
    • Le implementazioni non devono implementare limiti che controllano l'accesso allo shader alle risorse tramite descrittori, gli accessi out-of-bound producono un comportamento non definito.
      • Come byproduct, il flag di intervallo dei descrittori D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS nelle firme radice non è supportato.
  • I descrittori UAV/CBV possono essere eseguiti solo sulle risorse dagli heap predefiniti (quindi nessun heap di caricamento/readback). In questo modo l'applicazione deve eseguire copie per ottenere i dati in CPU-GPU<>.
  • Nonostante sia il livello di funzionalità di associazione più basso, esistono ancora alcune funzionalità necessarie anche in questo livello che vale la pena di chiamare:
    • Gli heap del descrittore possono essere aggiornati dopo la registrazione degli elenchi di comandi (vedere D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE nella specifica di associazione di risorse)
    • I descrittori radice sono fondamentalmente puntatori GPUVA
      • Anche se non è disponibile alcun supporto MMU/VA, le VA del buffer usate nei descrittori radice possono essere emulate dalle implementazioni eseguendo l'applicazione di patch agli indirizzi.

Restrizioni del buffer strutturato

I buffer strutturati devono avere un indirizzo di base allineato a 4 byte e stride deve essere 2 o un multiplo di 4. Il caso di uno stride pari a 2 è per le app con dati a 16 bit, in particolare dato che non esiste alcun supporto per i buffer tipizzato in D3D_FEATURE_LEVEL_1_0_CORE.

Stride specificato nei descrittori deve corrispondere allo stride specificato in HLSL.

Supporto della coda dei comandi per i dispositivi Core

Calcola e copia solo le code (nessuna coda 3D, video e così via).

Supporto shader per i dispositivi Core

Solo shader di calcolo, nessun shader grafico (Vertex, Pixel Shader e così via) né alcuna funzionalità correlata, ad esempio destinazioni di rendering, catene di scambio, assembler di input.

Precisione aritmetica

I dispositivi core non devono supportare i denorm per le operazioni a virgola mobile a 16 bit.

API supportate per i dispositivi Core

L'elenco seguente rappresenta il subset supportato dell'interfaccia di programmazione dell'applicazione completa (le API non supportate nel livello di funzionalità Core 1.0 non sono elencate).

Metodi ID3D12Device

Metodi ID3D12Device1

Metodi ID3D12Device2

Metodi ID3D12Device3

Metodi ID3D12Device4

Metodi ID3D12Device5

Metodi ID3D12CommandQueue

Metodi ID3D12CommandList

Metodi ID3D12GraphicsCommandList

Metodi ID3D12GraphicsCommandList1

Metodi ID3D12GraphicsCommandList2

Metodi ID3D12GraphicsCommandList4