Condividi tramite


DXGKDDI_CREATEALLOCATION funzione di callback (d3dkmddi.h)

La funzione del driver di visualizzazione in modalità kernel (KMD) DxgkDdiCreateAllocation funzione 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 di un blocco di contesto associato a una scheda di visualizzazione. Il KMD ha fornito in precedenza questo handle per dxgkrnl nella MiniportDeviceContext parametro di output 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 creato correttamente l'allocazione.
STATUS_INVALID_PARAMETER I parametri passati contengono errori che impedivano DxgkDdiCreateAllocation di completamento.
STATUS_NO_MEMORY DxgkDdiCreateAllocation non è stato possibile allocare memoria necessaria per il completamento.
STATUS_GRAPHICS_DRIVER_MISMATCH Il KMD non è compatibile con il driver di visualizzazione in modalità utente (UMD) che ha avviato la chiamata a DxgkDdiCreateAllocation.

Osservazioni

Dopo che la messaggistica unificata chiama pfnAllocateCb, Dxgkrnl chiama la funzione DxgkDdiCreateAl location di KMD per creare le allocazioni. Il KMD deve interpretare i dati privati (nel pPrivateDriverData membro della struttura DXGK_ALLOCATIONINFO per ogni allocazione) che viene passato dalla MESSAGGISTICA unificata e deve determinare l'elenco dei parametri necessari per creare ogni allocazione tramite la gestione della memoria video. Per altre informazioni su come il KMD fornisce questi parametri alla gestione della memoria video, vedere Specifica di segmenti durante la creazione di allocazioni.

Il KMD deve restituire un handle di allocazione, che in genere è un puntatore a una struttura di dati del driver privato che contiene informazioni sull'allocazione. La UMD può chiamare la funzionedxgkCbGetHandleDatain qualsiasi momento per recuperare i dati privati per un handle di allocazione. Di conseguenza, il KMD non è necessario per mantenere una tabella handle di allocazione privata. Di fatto, sconsigliamo vivamente le tabelle di gestione privata perché potrebbero diventare non aggiornate o non sincronizzate con il sottosistema kernel della grafica DirectX in scenari di cambio in modalità schermo, ad esempio commutatore rapido dell'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 del miniport di visualizzazione può controllare se il flag campo di bit risorsa è impostato nel flag membro della struttura DXGKARG_CREATEALLOCATION a cui punta il parametro pCreateAllocation di DxgkDdiCreateAllocation. Se l'allocazione appartiene a una risorsa, il driver miniport di visualizzazione può (ma non è necessario) restituire un handle di risorsa, che in genere è un puntatore a una struttura di dati del driver privato che descrive la risorsa. Se il sottosistema del kernel della grafica DirectX chiama DxgkDdiCreateAllocation per creare un'allocazione aggiuntiva per una risorsa esistente, il hResource membro di DXGKARG_CREATEALLOCATION contiene l'handle restituito dal precedente DxgkDdiCreateAllocation chiamare per tale risorsa. Se necessario, il driver miniport di visualizzazione può modificare l'handle di risorsa durante una chiamata a DxgkDdiCreateAllocation.

Se il driver di visualizzazione in modalità utente inserisce un handle di risorsa in un buffer dei comandi, il driver miniport di visualizzazione può recuperare i dati privati chiamando DxgkCbGetHandleData. Il driver miniport di visualizzazione 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->Dimensioni.

Le risorse create nel DxgkDdiCreateAllocation chiamata appartengono alla scheda e non al dispositivo. Il driver miniport di visualizzazione non deve fare riferimento ai dati del dispositivo in qualsiasi punto all'interno delle strutture di dati di allocazione e risorse private. 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 pageable.

Allocazione dei buffer della cronologia

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

Fabbisogno

Requisito Valore
client minimo supportato Windows Vista
piattaforma di destinazione Desktop
intestazione d3dkmddi.h
IRQL PASSIVE_LEVEL

Vedere anche

DXGKARG_CREATEALLOCATION

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkCbEnumHandleChildren

DxgkCbGetHandleData

DxgkDdiAddDevice

pfnAllocateCb