Gestion des ressources (Direct3D 9)
La gestion des ressources est le processus dans lequel les ressources sont promues du stockage mémoire système au stockage accessible aux appareils et ignorées du stockage accessible par l’appareil. L’exécution de Direct3D a son propre algorithme de gestion basé sur une technique de priorité moins récente. Direct3D bascule vers une technique de priorité la plus récente lorsqu’il détecte que plus de ressources que peuvent coexister dans la mémoire accessible par l’appareil sont utilisées dans une seule trame , entre les appels IDirect3DDevice9::BeginScene et IDirect3DDevice9::EndScene .
Utilisez l’indicateur D3DPOOL_DEFAULT au moment de la création pour spécifier qu’une ressource est placée dans le pool de mémoire le plus approprié pour l’ensemble d’utilisations demandé pour la ressource donnée. Il s’agit généralement de la mémoire vidéo, y compris la mémoire vidéo locale et la mémoire de port graphique accélérée (AGP). Les ressources du pool par défaut ne sont pas conservées pendant les transitions entre les états perdus et opérationnels de l’appareil. Ces ressources doivent être libérées avant d’appeler la réinitialisation et doivent ensuite être recréations.
Utilisez l’indicateur D3DPOOL_MANAGED au moment de la création pour spécifier une ressource managée. Les ressources managées persistent pendant les transitions entre les états perdus et opérationnels de l’appareil. Ces ressources existent à la fois dans la mémoire vidéo et la mémoire système. Une ressource managée est copiée dans la mémoire vidéo quand elle est nécessaire pendant le rendu. L’appareil peut être restauré avec un appel à IDirect3DDevice9::Reset, et ces ressources continuent de fonctionner normalement sans être rechargées avec des données. Toutefois, si l’appareil doit être détruit et recréé, toutes les ressources doivent être recréées.
La gestion des ressources n’est pas recommandée pour les ressources qui changent avec une fréquence élevée. Par exemple, les tampons de vertex et d’index qui sont utilisés pour parcourir un graphique de scène chaque image rendant uniquement la géométrie visible par l’utilisateur modifie chaque image. Étant donné que les ressources managées sont soutenues par la mémoire système, les modifications constantes doivent être mises à jour dans la mémoire système, ce qui peut entraîner une dégradation grave des performances. Pour ce scénario particulier, D3DPOOL_DEFAULT ainsi que D3DUSAGE_DYNAMIC doivent être utilisés.
Un autre exemple pour lequel la gestion des ressources n’est pas recommandée (et explicitement non autorisée par le runtime) est la gestion d’une texture créée avec D3DUSAGE_RENDERTARGET. Si la mémoire utilisée par les cibles de rendu était gérée par le runtime, son contenu doit être constamment copié dans la mémoire système pendant le rendu, ce qui entraîne des pénalités de performances importantes. Pour cette raison, les cibles de rendu doivent être créées dans le pool par défaut. Si l’accès processeur des données contenues dans une cible de rendu est nécessaire, les données doivent être copiées vers une ressource créée dans D3DPOOL_SYSTEMMEM à l’aide de IDirect3DDevice9::UpdateTexture ou IDirect3DDevice9::UpdateSurface
Pour plus d’informations sur l’état perdu d’un appareil, consultez Appareils perdus (Direct3D 9).
Rubriques connexes