DXGKDDI_CREATEALLOCATION funzione di callback (d3dkmddi.h)

La funzione DxgkDdiCreateAllocation crea allocazioni di memoria video o di sistema.

Sintassi

DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;

NTSTATUS DxgkddiCreateallocation(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}

Parametri

[in] hAdapter

Handle a un blocco di contesto associato a una scheda di visualizzazione. Il driver miniport visualizzato in precedenza ha fornito questo handle al sottosistema kernel della grafica Microsoft DirectX nel parametro di output MiniportDeviceContext della funzione DxgkDdiAddDevice .

[in/out] pCreateAllocation

Puntatore a una struttura DXGKARG_CREATEALLOCATION che contiene informazioni per la creazione di allocazioni.

Valore restituito

DxgkDdiCreateAllocation restituisce uno dei valori seguenti:

Codice restituito Descrizione
STATUS_SUCCESS DxgkDdiCreateAllocation ha creato correttamente l'allocazione.
STATUS_INVALID_PARAMETER I parametri passati a DxgkDdiCreateAllocation contengono errori che impediscono il completamento.
STATUS_NO_MEMORY DxgkDdiCreateAllocation non è stato possibile allocare memoria necessaria per il completamento.
STATUS_GRAPHICS_DRIVER_MISMATCH Il driver miniport visualizzato non è compatibile con il driver di visualizzazione in modalità utente che ha avviato la chiamata a DxgkDdiCreateAllocation.

Commenti

Dopo che il driver di visualizzazione in modalità utente chiama la funzione pfnAllocateCb , il sottosistema kernel della grafica DirectX chiama la funzione DxgkDdiCreateAllocation del driver miniport per creare le allocazioni. Il driver miniport visualizzato deve interpretare i dati privati (nel membro pPrivateDriverData della struttura di DXGK_ALLOCATIONINFO per ogni allocazione) passati dal driver di visualizzazione in modalità utente e deve determinare l'elenco dei parametri necessari per creare ogni allocazione tramite la gestione memoria video. Per altre informazioni sul modo in cui il driver miniport visualizzato fornisce questi parametri alla gestione memoria video, vedere Specifica dei segmenti durante la creazione di allocazioni.

Il driver miniport di visualizzazione deve restituire un handle di allocazione, che in genere è un puntatore a una struttura di dati del driver privato che contiene informazioni sull'allocazione. Il driver miniport visualizzato può chiamare la funzione DxgkCbGetHandleData in qualsiasi momento per recuperare i dati privati per un handle di allocazione. Pertanto, il driver miniport visualizzato non è necessario per mantenere una tabella di handle di allocazione privata. In effetti, è consigliabile sconsigliare le tabelle private perché potrebbero diventare non aggiornate o non sincronizzate con il sottosistema kernel di grafica DirectX in scenari di commutatore in modalità display, ad esempio commutatori veloci per l'utente, scollegamento frequente e così via.

Il driver di visualizzazione in modalità utente assegna un'allocazione a una risorsa o a un dispositivo. Per determinare se l'allocazione appartiene a una risorsa, il driver miniport visualizzato può verificare se il flag di campo a bit risorsa è impostato nel membro Flag della struttura DXGKARG_CREATEALLOCATION a cui punta il parametro pCreateAllocation di DxgkDdiCreateAllocation . Se l'allocazione appartiene a una risorsa, il driver miniport visualizzato può (ma non è necessario) restituire un handle di risorse, che in genere è un puntatore a una struttura di dati del driver privato che descrive la risorsa. Se il sottosistema kernel della grafica DirectX chiama DxgkDdiCreateAllocation per creare un'allocazione aggiuntiva per una risorsa esistente, il membro hResource di DXGKARG_CREATEALLOCATION contiene l'handle restituito dalla chiamata DxgkDdiCreateAllocation per tale risorsa. Se necessario, il driver miniport visualizzato può modificare l'handle di risorse durante una chiamata a DxgkDdiCreateAllocation.

Se il driver di visualizzazione in modalità utente inserisce un handle di risorse in un buffer di comandi, il driver miniport visualizzato può recuperare i dati privati chiamando DxgkCbGetHandleData. Il driver miniport visualizzato può anche enumerare tutte le allocazioni figlio della risorsa chiamando la funzione DxgkCbEnumHandleChildren .

A partire da Windows 7, se un driver miniport visualizzato elabora una chiamata alla funzione DxgkDdiCreateAllocation per creare allocazioni per l'accelerazione hardware GDI, il driver deve impostare le dimensioni dell'allocazione (incluso il valore di passo per le allocazioni visibili della CPU), pCreateAllocation-pAllocationInfo-Size>.>

Le risorse create nella chiamata DxgkDdiCreateAllocation appartengono alla scheda e non al dispositivo. Il driver miniport visualizzato non deve fare riferimento ai dati del dispositivo ovunque all'interno delle strutture di dati di allocazione privata e risorse. A causa della condivisione della superficie, una risorsa potrebbe essere in uso dopo la distruzione del dispositivo da cui il driver di visualizzazione in modalità utente ha creato la risorsa.

DxgkDdiCreateAllocation deve essere reso paginabile.

Allocazione dei buffer della cronologia

A partire da Windows 8.1, quando viene chiamato DxgkDdiCreateAllocation, il driver miniport visualizzato può impostare la DXGK_ALLOCATIONINFOFLAGS.Membro HistoryBuffer per indicare che il driver in modalità utente può gestire la creazione e la distruzione dei buffer della cronologia.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Piattaforma di destinazione Desktop
Intestazione d3dkmddi.h
IRQL PASSIVE_LEVEL

Vedi anche

DXGKARG_CREATEALLOCATION

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkCbEnumHandleChildren

DxgkCbGetHandleData

DxgkDdiAddDevice

pfnAllocateCb