Condividi tramite


DXGKDDI_ACQUIRESWIZZLINGRANGE funzione di callback (d3dkmddi.h)

La funzione DxgkDdiAcquireSwizzlingRange rende accessibile un'allocazione tramite l'apertura dell'unità di elaborazione centrale (CPU) per il segmento specificato.

Sintassi

DXGKDDI_ACQUIRESWIZZLINGRANGE DxgkddiAcquireswizzlingrange;

NTSTATUS DxgkddiAcquireswizzlingrange(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_ACQUIRESWIZZLINGRANGE pAcquireSwizzlingRange
)
{...}

Parametri

[in] hAdapter

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

[in/out] pAcquireSwizzlingRange

Puntatore a una struttura di DXGKARG_ACQUIRESWIZZLINGRANGE che contiene informazioni per rendere accessibile un'allocazione tramite l'apertura della CPU.

Valore restituito

DxgkDdiAcquireSwizzlingRange restituisce uno dei valori seguenti:

Codice restituito Descrizione
STATUS_SUCCESS DxgkDdiAcquireSwizzlingRange reso accessibile l'allocazione.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED DxgkDdiAcquireSwizzlingRange non è stato possibile programmare l'intervallo di scorrimento per l'allocazione. La gestione della memoria video non riesce ad acquisire l'intervallo di scorrimento senza eseguire ulteriori tentativi.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE DxgkDdiAcquireSwizzlingRange non è stato possibile programmare l'intervallo di scorrimento per l'allocazione perché un altro intervallo di scorrimento sta attualmente usando le risorse dell'unità di elaborazione grafica (GPU) necessarie. La gestione memoria video tenta di rilasciare un intervallo attualmente in uso e quindi tenta di configurare nuovamente l'intervallo di scorrimento.

Osservazioni

La funzione DxgkDdiAcquireSwizzlingRange viene chiamata dopo che il driver di visualizzazione in modalità utente richiede un indirizzo virtuale che fa riferimento ai bit di un'allocazione , ovvero dopo che il driver di visualizzazione in modalità utente chiama la funzione pfnLockCb con il flag AcquireAperture campo di bit impostato nel Flag membro della struttura D3DDDICB_LOCK e mentre l'allocazione si trova attualmente in un segmento di memoria accessibile dalla CPU). Se il flag AcquireAperture campo di bit non è impostato nella chiamata a pfnLockCb, DxgkDdiAcquireSwizzlingRange non viene chiamato e l'allocazione deve essere in un formato che il driver di visualizzazione in modalità utente o un'applicazione può elaborare.

Quando viene chiamato dxgkDdiAcquireSwizzlingRange, Il driver di miniport di visualizzazione deve effettuare l'allocazione specificata ,ovvero il membro hAllocation della struttura DXGKARG_ACQUIRESWIZZLINGRANGE che il pAcquireSwizzlingRange parametro punta) accessibile tramite l'apertura della CPU per il segmento specificato , ovvero il SegmentId membro di DXGKARG_ACQUIRESWIZZLINGRANGE). L'allocazione deve essere visualizzata esattamente come appare nella memoria del computer dopo una rimozione senza problemi.

Non tutte le richieste da parte del driver di visualizzazione in modalità utente sono accessibili al driver miniport di visualizzazione. Gli intervalli swizzling acquisiti dal gestore di memoria video vengono memorizzati nella cache in base all'allocazione a cui sono associati e ai dati privati specificati. Nella prima richiesta del driver di visualizzazione in modalità utente per accedere a un'allocazione, viene chiamata la funzione dxgkDdiAcquireSwizzlingRange del driver miniport di visualizzazione per rendere accessibile l'allocazione. Nelle richieste successive con dati privati corrispondenti, il mapping di configurazione precedente viene usato per accedere all'allocazione.

Il gestore della memoria video chiama la funzione dxgkDdiReleaseSwizzlingRange del driver miniport di visualizzazione per rilasciare un intervallo di scorrimento quando un'allocazione viene rimossa o eliminata definitivamente o quando un'altra allocazione richiede un'apertura. Un'allocazione può essere associata a un numero qualsiasi di intervalli di scorrimento ( ad esempio, un'apertura per livello MIP).

Il numero di intervalli swizzling supportati da un adattatore viene esposto dal driver nel NumberOfSwizzlingRanges membro della struttura DXGK_DRIVERCAPS quando viene chiamata la funzione dxgkDdiQueryAdapterInfo del driver. Tutti gli intervalli sono uguali (ovvero, qualsiasi intervallo può annullare o fino a qualsiasi tipo di scorrimento o tigliatura). Gestione memoria video arbitra gli intervalli swizzling disponibili tra tutte le applicazioni che le richiedono.

Il driver deve usare l'I/O mappato alla memoria (MMIO) per configurare un intervallo swizzling. Questi accessi swizzling-range non devono interferire con l'esecuzione della GPU (ovvero la GPU non deve essere inattiva quando viene chiamato DxgkDdiAcquireSwizzlingRange).

Tutte le chiamate a DxgkDdiAcquireSwizzlingRange vengono serializzate tra loro, ma non con altre funzioni DDI.

Se la GPU supporta intervalli swizzling che reindirizzano gli accessi della CPU a segmenti di memoria o memoria di sistema non accessibili dalla CPU, il driver di visualizzazione in modalità utente può impostare la combinazione di AcquireAperture e UseAlternateVA flag di campo di bit nel flag membro della struttura D3DDDICB_LOCK in una chiamata alla funzione pfnLockCb per bloccare l'allocazione. In questo caso, il gestore della memoria video chiama il driver miniport di visualizzazione DxgkDdiAcquireSwizzlingRange funzione per acquisire un intervallo swizzling per l'allocazione anche se l'allocazione si trova in un segmento di memoria non accessibile dalla CPU o in un segmento di apertura. Gli intervalli swizzling sono associati ad alcune risorse GPU (ad esempio, intervalli di aperture PCI) gestiti dal driver e non sono accessibili a o non sono account per la gestione della memoria video.

Una chiamata a DxgkDdiAcquireSwizzlingRange per acquisire un intervallo di scorrimento potrebbe non riuscire perché una risorsa gestita dal driver è esaurita. Anche se l'intervallo swizzling stesso è libero, potrebbe non essere utilizzabile a causa della risorsa mancante. Il driver può indicare che un intervallo swizzling non è disponibile per la gestione della memoria video restituendo STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE da DxgkDdiAcquireSwizzlingRange. Il gestore di memoria video tenta quindi di rilasciare un intervallo di scorrimento che è attualmente in uso e quindi chiama il DxgkDdiAcquireSwizzlingRange funzione per configurare nuovamente il nuovo intervallo di scorrimento. Se vengono rilasciati tutti gli intervalli di scorrimento e il driver ha ancora esito negativo con STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE, la gestione della memoria video non riesce ad acquisire un intervallo di scorrimento per l'allocazione.

dxgkDdiAcquireSwizzlingRange deve essere reso impaginabile.

Fabbisogno

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

Vedere anche

D3DDDICB_LOCK

DXGKARG_ACQUIRESWIZZLINGRANGE

DXGK_DRIVERCAPS

DxgkDdiAddDevice

DxgkDdiCreateAllocation

DxgkDdiQueryAdapterInfo

DxgkDdiReleaseSwizzlingRange

pfnLockCb