PFND3DDDI_LOCK funzione di callback (d3dumddi.h)

La funzione Lock blocca la risorsa specificata o una superficie all'interno della risorsa.

Sintassi

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

Parametri

hDevice

Handle per il dispositivo di visualizzazione (contesto grafico).

unnamedParam2

pData [in, out]

Puntatore a una struttura D3DDDIARG_LOCK che descrive la risorsa o la superficie all'interno della risorsa da bloccare.

Valore restituito

Lock restituisce uno dei valori seguenti:

Codice restituito Descrizione
S_OK La risorsa è bloccata correttamente.
E_OUTOFMEMORY Il blocco non è riuscito ad allocare la memoria necessaria per il completamento.
D3DDDIERR_WASSTILLDRAWING La risorsa non è inattiva quando il runtime di Microsoft Direct3D ha chiamato la funzione Lock con il flag di campo di bit DoNotWait impostato nel membro Flags di D3DDDIARG_LOCK .

Commenti

Il runtime di Microsoft Direct3D chiama la funzione Lock del driver di visualizzazione in modalità utente per bloccare una risorsa o una superficie all'interno della risorsa. Questa risorsa o superficie bloccata può essere letta o scritta in usando operazioni di lettura e scrittura dalla CPU. Quando il runtime chiama Lock, il driver di visualizzazione in modalità utente deve chiamare la funzione di callback pfnLockCb del runtime per bloccare un'allocazione corrispondente alla risorsa o alla superficie. Si noti che poiché il driver di visualizzazione in modalità utente può allocare più allocazioni per ogni risorsa o superficie, il driver di visualizzazione in modalità utente potrebbe essere necessario per convertire o elaborare in modo appropriato il puntatore di allocazione restituito da pfnLockCb prima di restituire la chiamata Di blocco al runtime.

In genere, le chiamate a Lock sono seguite da chiamate corrispondenti alla funzione Unlock del driver prima che il driver riceva tutte le chiamate alle funzioni di draw-primitive, ovvero chiamate a DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitive e DrawPrimitive2. Questo ordine garantisce che un driver non venga mai richiesto di disegnare da una risorsa bloccata. Tuttavia, in caso di esecuzione di trasformazioni software e illuminazione, il runtime deve chiamare una delle funzioni di disegno-primitiva del driver prima di sbloccare una risorsa (attualmente solo i vertex buffer presentano questo comportamento). Il runtime contrassegna i vertex buffer su cui può verificarsi questo comportamento non comune con il flag di campo di bit MightDrawFromLocked nel membro Flags delle strutture di D3DDDIARG_CREATERESOURCE e D3DDDIARG_LOCK ( vale a dire, sia in fase di creazione che in fase di blocco). Quando l'hardware esegue attivamente il rendering da un buffer dei vertici bloccato, il driver non deve eseguire alcuna azione speciale perché il runtime non sovrascriverà alcun dato nel buffer dei vertici bloccato.

Il runtime chiama la funzione Lock del driver di visualizzazione in modalità utente per bloccare anche le superfici di memoria di sistema preallocate. Questa operazione consente al driver di visualizzazione in modalità utente di sincronizzare correttamente i riferimenti a tali superfici che potrebbero trovarsi nel flusso dei comandi hardware. Il driver di visualizzazione in modalità utente può eseguire la sincronizzazione tramite:

  • Scaricamento ( ovvero, chiamata della funzione di callback pfnRenderCb del runtime) qualsiasi comando in sospeso in base alle esigenze.
  • Chiamata di pfnLockCb con l'handle di allocazione appropriato per i comandi già inviati all'hardware.
Il driver di visualizzazione in modalità utente restituisce un puntatore alla memoria per la superficie bloccata e l'inclinazione della superficie nei membri pSurfData e Pitch della struttura D3DDDIARG_LOCK. Tuttavia, per le superfici di memoria di sistema preallocate, il runtime ignora la memoria e l'inclinazione del set di driver, anche se il driver può comunque non riuscire la chiamata di blocco (e quindi eseguire il failback all'applicazione). Il runtime imposta il flag di campo di bit NotifyOnly nel membro Flags della struttura D3DDDIARG_LOCK per distinguere le chiamate di blocco che bloccano le superfici di memoria di sistema preallocate da altre chiamate di blocco .

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Universale
Intestazione d3dumddi.h (include D3dumddi.h)

Vedi anche

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb