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 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] pAcquireSwizzlingRange

Puntatore a una struttura 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 ha reso l'allocazione accessibile.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED DxgkDdiAcquireSwizzlingRange non è riuscito a programmare l'intervallo di scorrimento per l'allocazione. La gestione memoria video non riesce ad acquisire l'intervallo di scorrimento senza eseguire ulteriori tentativi.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE DxgkDdiAcquireSwizzlingRange non è riuscito a 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 di nuovo l'intervallo di scorrimento.

Commenti

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 di bit CaptureAperture impostato nel membro Flagdella struttura D3DDDICB_LOCK e mentre l'allocazione si trova in un segmento di memoria accessibile dalla CPU. Se il flag di bit-field AcquireAperture 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 miniport visualizzato deve effettuare l'allocazione specificata, ovvero il membro hAllocation della struttura DXGKARG_ACQUIRESWIZZLINGRANGE a cui punta il parametro pAcquireSwizzlingRange ) accessibile tramite l'apertura della CPU per il segmento specificato, ovvero il membro SegmentId di DXGKARG_ACQUIRESWIZZLINGRANGE. L'allocazione deve essere visualizzata esattamente come viene visualizzata nella memoria del computer dopo un'eliminazione inswizzling.

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

La gestione memoria video chiama la funzione DxgkDdiReleaseSwizzlingRange del driver di visualizzazione per rilasciare un intervallo di scorrimento quando un'allocazione viene rimossa o eliminata o quando un'altra allocazione richiede un'apertura. Un'allocazione può essere associata a qualsiasi numero 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 membro NumberOfSwizzlingRanges della struttura DXGK_DRIVERCAPS quando viene chiamata la funzione DxgkDdiQueryAdapterInfo del driver. Tutti gli intervalli sono uguali(ovvero, qualsiasi intervallo può annullare l'esecuzione o fino a quando qualsiasi tipo di scorrimento o tiling). La gestione memoria video arbitra gli intervalli di scorrimento disponibili tra tutte le applicazioni che le richiedono.

Il driver deve usare l'I/O mappato alla memoria (MMIO) per configurare un intervallo di scorrimento. Questi accessi a intervalli di scorrimento 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 alcuna altra funzione DDI.

Se la GPU supporta intervalli swizzling che reindirizzano l'accesso della CPU ai segmenti di memoria non accessibili dalla CPU o alla memoria di sistema, il driver di visualizzazione in modalità utente può impostare la combinazione di flag Di acquisizioneAperture e UseAlternateVA nel membro Flags della struttura D3DDDICB_LOCK in una chiamata alla funzione pfnLockCb per bloccare l'allocazione. In questa situazione, la gestione memoria video chiama la funzione DxgkDdiAcquireSwizzlingRange del driver di visualizzazione 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 apertura PCI) gestiti dal driver e non sono accessibili a o account per la gestione della memoria video.

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

DxgkDdiAcquireSwizzlingRange deve essere reso paginabile.

Requisiti

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

Vedi anche

D3DDDICB_LOCK

DXGKARG_ACQUIRESWIZZLINGRANGE

DXGK_DRIVERCAPS

DxgkDdiAddDevice

DxgkDdiCreateAllocation

DxgkDdiQueryAdapterInfo

DxgkDdiReleaseSwizzlingRange

pfnLockCb