STRUCTURE VIDEOMEMORY (ddrawint.h)
La structure VIDEOMEMORY permet au pilote de gérer sa mémoire d’affichage dans des tas.
Syntaxe
typedef struct _VIDEOMEMORY {
DWORD dwFlags;
FLATPTR fpStart;
union {
FLATPTR fpEnd;
DWORD dwWidth;
};
DDSCAPS ddsCaps;
DDSCAPS ddsCapsAlt;
union {
#if ...
_VMEMHEAP *lpHeap;
#else
struct _VMEMHEAP *lpHeap;
#endif
DWORD dwHeight;
};
} VIDEOMEMORY;
Membres
dwFlags
Spécifie un ensemble d’indicateurs qui décrivent cette section particulière de la mémoire d’affichage. Ce membre peut être un or au niveau du bit de l’une des valeurs suivantes :
Indicateur | Signification |
---|---|
VIDMEM_ISLINEAR | La mémoire d’affichage est un bloc de mémoire contigu. |
VIDMEM_ISRECTANGULAR | La mémoire d’affichage est rectangulaire. |
VIDMEM_ISHEAP | Cet indicateur est réservé à l’utilisation du système et doit être ignoré par le pilote. |
VIDMEM_ISNONLOCAL | Le tas réside dans la mémoire non locale (AGP). |
VIDMEM_ISWC | Le pilote a activé la combinaison d’écritures sur la mémoire d’affichage dans ce tas. La combinaison d’écritures est un mode de mise en cache spécial dans les processeurs Pentium Pro qui effectue des lots d’écritures dans la même ligne de cache afin qu’elles puissent être transférées dans une seule horloge de bus. La combinaison d’écritures ne préserve pas l’ordre des écritures, un compromis généralement acceptable pour les mémoires tampons d’images. Reportez-vous à la documentation Intel pour plus d’informations sur la combinaison d’écritures. Cet indicateur ne peut pas être utilisé, sauf si l’indicateur VIDMEM_ISNONLOCAL est également défini. |
VIDMEM_HEAPDISABLED | Le runtime Microsoft DirectDraw utilise cet indicateur pour désactiver un tas lorsque l’initialisation du tas a échoué. Cela se produit probablement avec un tas AGP. Le pilote ne doit pas définir ce bit. |
fpStart
Pointe vers l’adresse de départ d’une plage de mémoire dans le tas.
fpEnd
Pointe vers l’adresse de fin d’une plage de mémoire si le tas est linéaire. Cette adresse est inclusive, c’est-à-dire qu’elle spécifie la dernière adresse valide de la plage. Ainsi, le nombre d’octets spécifiés par fpStart et fpEnd est (fpEnd - fpStart + 1).
dwWidth
Spécifie la largeur en octets de la section de mémoire pointée par fpStart. Ce membre doit uniquement être utilisé pour décrire des régions de mémoire rectangulaires.
ddsCaps
Spécifie une structure DDSCAPS dans laquelle le pilote retourne les fonctionnalités pour lesquelles cette section de mémoire ne peut pas être utilisée.
ddsCapsAlt
Spécifie une structure DDSCAPS dans laquelle le pilote retourne les fonctionnalités pour lesquelles ce segment de mémoire ne peut pas être utilisé lorsqu’aucune autre mémoire n’est trouvée lors du premier passage.
lpHeap
Réservé à l’utilisation du système et doit être ignoré par le pilote.
dwHeight
Spécifie la hauteur du segment de mémoire vers lequel fpStart pointe. Ce membre doit uniquement être utilisé pour décrire des régions de mémoire rectangulaires.
Notes
Sur Microsoft Windows 2000 et versions ultérieures, la structure de données est appelée VIDEOMEMORY et sur Windows 98/Me, la structure de données est appelée VIDMEM.
GDI alloue et transmet un tableau de structures VIDEOMEMORY au deuxième appel de la fonction DrvGetDirectDrawInfo du pilote. Le pilote doit renseigner les membres appropriés de chaque structure pour décrire chaque section particulière de la mémoire. La liste fournit une description complète de la mémoire hors écran du pilote.
DirectDraw effectue une analyse pour allouer ses surfaces dans l’ordre dans lequel les tas de mémoire d’affichage sont répertoriés. Les tas sont gérés dans un tableau de structures VIDEOMEMORY. La mémoire allouée en premier sera la mémoire accessible en premier. La structure VIDEOMEMORY configure certains points de départ et détermine la quantité de mémoire sur la surface et ce qui ne peut pas être fait avec la surface. DirectDraw le gère en sous-allouant et en désaffectant la mémoire, c’est-à-dire en créant et en détruisant des surfaces sous la juridiction de chaque tas. Les limites physiques déterminent comment configurer ces attributs.
Le gestionnaire de tas de DirectDraw effectue deux passages à travers les structures VIDEOMEMORY. Le membre ddsCaps indique à DirectDraw ce pour quoi la mémoire du tas ne peut pas être utilisée lors de la première passe. Par exemple, si le tas était juste assez grand pour une mémoire tampon arrière, les sprites peuvent être exclus de l’allocation lors de la première passe en définissant l’indicateur DSCAPS_OFFSCREENPLAIN dans la structure DDSCAPS . De cette façon, d’autres surfaces se rempliraient de sprites, tout en préservant la mémoire tampon arrière pour le basculement de page. Le membre ddsCapsAlt peut être défini pour autoriser les sprites au deuxième passage (en supprimant l’indicateur DSCAPS_OFFSCREENPLAIN). Cela permet aux tas d’être utilisés de préférence pour leur utilisation la plus élevée et la meilleure, sans exclure d’autres utilisations. En choisissant soigneusement l’ordre d’allocation (par exemple, en listant la mémoire tampon arrière en dernier), vous pouvez parfois éliminer la nécessité de trier par ddsCaps et ddsCapsAlt .
Spécifications
En-tête | ddrawint.h (inclure Winddi.h) |