Condividi tramite


Gestione della memoria Multiple-Head

L'impostazione del bit della funzionalità di DDSCAPS2_ADDITIONALPRIMARY nel membro dwCaps2 della struttura DDSCAPS2 per ogni superficie nella testa subordinata notifica che la testa è l'ultima superficie allocata dalla memoria video assegnata a tale testa. L'intestazione subordinata deve quindi rinunciare al controllo dell'allocazione della memoria video all'intestazione master perché la testa subordinata garantisce che non riceva le successive chiamate DdCreateSurface per la durata dell'applicazione.

Il driver deve assicurarsi che l'intestazione master sia in grado di allocare memoria associata a teste subordinate.

Quando il runtime chiama la funzione DdDestroySurface del driver per distruggere le superfici sulla testa subordinata in cui viene impostato il bit di funzionalità DDSCAPS2_ADDITIONALPRIMARY, il driver riceve una notifica che l'intestazione subordinata è di nuovo sotto controllo della gestione della memoria video.

Per la maggior parte, questa scelta di cui è proprietaria la memoria video è intrinseca nel processo DirectDraw esistente. In particolare:

  • Il runtime garantisce che non vengano effettuate richieste di allocazione successive su teste subordinate dopo che vengono effettuate chiamate DdCreateSurface usando il bit DDSCAPS2_ADDITIONALPRIMARY. Pertanto, il driver non è necessario per limitare le allocazioni dal proprio pool di memoria video in qualsiasi momento.

  • Quando l'applicazione viene terminata o ridotta a icona, tutte le superfici vengono eliminate definitivamente. Di conseguenza, tutte le trame create dalla testa master dal pool del capo subordinato vengono pulite.

  • Se il bit DDSCAPS2_ADDITIONALPRIMARY non è impostato per le superfici su teste subordinate, tali teste continuano ad allocare memoria video come se fossero teste autonome. Infatti, tali teste subordinate sono funzionalmente identiche a qualsiasi altra scheda a più monitor.

  • Il driver è necessario per fornire un'implementazione in cui l'intestazione master alloca la memoria dal pool di un head subordinato, inclusa la determinazione del momento in cui una determinata risorsa può essere allocata dal pool di un head subordinato. Si noti che l'intestazione master non dispone di alcuna informazione relativa alla partecipazione a uno scenario a più teste. Quando la testa master esaurisce la propria memoria video, deve attraversare tutti i teste subordinati nel proprio gruppo per determinare se uno di questi teste dispone di pool che possono essere utilizzati dal master (in altre parole, per determinare se una delle teste subordinate ha ricevuto chiamate DdCreateSurface con il set di bit DDSCAPS2_ADDITIONALPRIMARY).

  • Si noti infine che il runtime garantisce che tutti i teste del gruppo partecipino allo scenario a più teste. Pertanto, il driver deve mantenere un solo bit di stato che indica se è attualmente in modalità a più teste.