Partager via


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)

Voir aussi

DDSCAPS

DrvGetDirectDrawInfo