PFND3DDDI_CREATERESOURCE2 funzione di callback (d3dumddi.h)
Crea una risorsa. Implementato dai driver di visualizzazione Windows Display Driver Model (WDDM) 1.2 e versioni successive.
Sintassi
PFND3DDDI_CREATERESOURCE2 Pfnd3dddiCreateresource2;
HRESULT Pfnd3dddiCreateresource2(
[in] HANDLE hDevice,
D3DDDIARG_CREATERESOURCE2 *unnamedParam2
)
{...}
Parametri
[in] hDevice
Handle per il dispositivo di visualizzazione (contesto grafico) usato per creare la risorsa.
unnamedParam2
pResource2 [in, out]
Puntatore a una struttura D3DDDIARG_CREATERESOURCE2 che descrive la risorsa creata.
Valore restituito
Restituisce S_OK o un risultato di errore appropriato. I driver WDDM 1.3 e versioni successive direct3D Level 9 devono restituire questo codice di errore:
Codice restituito | Descrizione |
---|---|
E_INVALIDARG | Oggetto D3DDDIARG_CREATERESOURCE2 . Flagsmember ha il valore del flag CaptureBuffer impostato e la risorsa supera ciò che il driver può supportare. |
Commenti
La chiamata a CreateResource2 può contenere un elenco di superfici. Il membro SurfCount della struttura D3DDDIARG_CREATERESOURCE2 specificata dal parametro pResource2 specifica il numero di superfici, inclusi i livelli della mappa MIP, da creare. Ad esempio, una risorsa mappa MIP con trama 256x256x9 contiene un elenco di nove superfici in cui il membro SurfCount e il numero di livelli della mappa MIP sono entrambi impostati su 9. Una mappa cubo che contiene nove livelli di mappa MIP deve avere il numero di livelli di mappa MIP impostati su 9 e SurfCount impostato su 54. Una catena di scambio a tre superfici deve avere SurfCount impostato su 3 e il numero di livelli della mappa MIP impostati su 0. Si noti che il numero di livelli della mappa MIP è sempre minore o uguale al valore in SurfCount.
In risposta alla chiamata CreateResource2 , il driver di visualizzazione in modalità utente può chiamare la funzione pfnAllocateCb per creare una o più allocazioni di memoria. Il driver di visualizzazione in modalità utente deve determinare se deve creare più allocazioni per superficie, un'allocazione per tutte le superfici o un'allocazione per ogni superficie. Per altre informazioni sulle allocazioni, vedere Gestione della memoria video e Pianificazione GPU.
Le risorse possono essere condivise da più dispositivi (hDevice) e processi. Il runtime specifica che una risorsa viene condivisa impostando il flag di campo di bit SharedResource nel membro Flags di D3DDDIARG_CREATERESOURCE2. Se questo flag di campo di bit è impostato, il driver di visualizzazione in modalità utente deve rispettare le restrizioni seguenti per le risorse condivise:
- Il driver di visualizzazione in modalità utente può chiamare le funzioni pfnAllocateCb e pfnDeallocateCb esattamente una volta.
- Il driver di visualizzazione in modalità utente non può creare allocazioni aggiuntive per la risorsa dopo la creazione iniziale della risorsa e in modo analogo può eliminare definitivamente le allocazioni delle risorse solo al momento in cui la risorsa stessa viene eliminata definitivamente.
- Quando la funzione DestroyResource del driver di visualizzazione in modalità utente viene chiamata per una risorsa condivisa creata o aperta tramite una chiamata alla funzione CreateResource2 o OpenResource del driver, il driver deve impostare il membro hResource della struttura D3DDDICB_DEALLOCATE su non NULL e il membro NumAllocations di D3DDDICB_DEALLOCATE su zero in una chiamata alla funzione pfnDeallocateCb per eliminare o chiudere la risorsa. Ovvero, le allocazioni associate a una risorsa condivisa non possono essere eliminate o chiuse singolarmente; la risorsa deve essere eliminata o chiusa in modo atomico in una chiamata a pfnDeallocateCb.
- Il numero di allocazioni deve essere coerente per il tipo di risorsa, ovvero un altro processo che sta creando lo stesso tipo di risorsa deve generare lo stesso numero e tipo di allocazioni. Inoltre, la ridenominazione non è consentita per queste risorse.
- I bit non definiti del membro Flags sono riservati.
- Se il flag campo di bit primario non è impostato in Flag, i membri RefreshRate e Output sono riservati.
- Se il flag di campo di bit RenderTarget, DecodeRenderTarget o VideoProcessRenderTarget non è impostato in Flag, i membri MultisampleType e MultisampleQuality sono riservati.
- Se il flag di campo di bit VertexBuffer non è impostato in Flags, il membro Fvf è riservato.
- Se i flag texture, CubeMap e Volume bit-field non sono impostati in Flags, il membro MipLevels è riservato.
Per una risorsa di memoria di sistema, il driver miniport di visualizzazione può scegliere di eseguire il wrapping di un'allocazione intorno alla memoria di sistema se la memoria di sistema è allineata correttamente per l'accesso diretto dall'unità di elaborazione grafica (GPU). Il driver miniport di visualizzazione esegue il wrapping di un'allocazione intorno alla memoria di sistema impostando il flag ExistingSysMem nel membro Flags della struttura DXGK_ALLOCATIONINFO durante la creazione dell'allocazione tramite la relativa funzione DxgkDdiCreateAllocation . Se il driver miniport di visualizzazione non può eseguire il wrapping di un'allocazione intorno alla memoria di sistema o il wrapping ha esito negativo, il driver deve comunque riuscire a creare la risorsa e usare la CPU per accedere alla risorsa.
Se il runtime richiede di creare un vertex o un buffer di indice e se il driver di visualizzazione in modalità utente non riesce a creare il buffer per motivi diversi da memoria insufficiente (ad esempio, mancanza di supporto hardware), il driver deve non riuscire con D3DERR_NOTAVAILABLE.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 |
Server minimo supportato | Windows Server 2012 |
Piattaforma di destinazione | Desktop |
Intestazione | d3dumddi.h (include D3dumddi.h) |