I. Introduction

Il y a quelques années, ce genre d'information n'était pas disponible pour les développeurs OpenGL, mais aujourd'hui, les deux grands d'OpenGL (je parle de NVIDIA et AMD/ATI) ont ajouté quelques extensions utiles pour récupérer la capacité de la mémoire de la carte graphique ainsi que d'autres données relatives.

II. Capacité de la mémoire

II-A. Avec NVIDIA

NVIDIA a récemment publié les spécifications d'une nouvelle extension nommée GL_NVX_gpu_memory_info.

Grâce à GL_NVX_gpu_memory_info, vous pouvez récupérer la taille totale et restante de la mémoire du GPU (processeur graphique).

Voici un extrait de code qui montre comment l'utiliser. GL_NVX_gpu_memory_info renvoie les tailles en ko.

 
Sélectionnez
#define GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX 0x9048
#define GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX 0x9049

GLint total_mem_kb = 0:
glGetIntegerv(GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX, 
              &total_mem_kb);

GLint cur_avail_mem_kb = 0:
glGetIntegerv(GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX, 
              &cur_avail_mem_kb);

Cette extension est utilisée dans GPU Shark pour obtenir l'utilisation de la mémoire des cartes graphiques NVIDIA comme vous pouvez le voir sur l'image suivante :

Image non disponible

Selon le site Geeks3D OpenGL extensions DB, GL_NVX_gpu_memory_info est disponible dans les pilotes d'affichage NVIDIA depuis la version R196.xx (voir R196.21).

II-B. Avec AMD/ATI

AMD a sorti deux extensions pour s'occuper de la capacité mémoire vidéo :

  • WGL_AMD_gpu_association ;
  • GL_ATI_meminfo.

WGL_AMD_gpu_association est une extension développée pour effectuer du rendu en parallèle : vous pouvez créer un contexte OpenGL différent sur chaque GPU. Cette extension est fournie avec des fonctionnalités de requêtes matérielles. Avec WGL_AMD_gpu_association vous pouvez obtenir la quantité de mémoire graphique disponible pour le GPU.

Voici comment l'utiliser pour obtenir la taille de la mémoire GPU en Mo :

 
Sélectionnez
UINT n = wglGetGPUIDsAMD(0, 0);
UINT *ids = new UINT[n];
size_t total_mem_mb = 0;
wglGetGPUIDsAMD(n, ids);
wglGetGPUInfoAMD(ids[0], 
    WGL_GPU_RAM_AMD, 
    GL_UNSIGNED_INT, 
    sizeof(size_t),
    &total_mem_mb);

J'ai testé cette extension dans ce minioutil nommé Radeon-Z ;)

Image non disponible

GL_ATI_meminfoest utilisée lorsque vous avez besoin d'informations plus détaillées sur la mémoire disponible pour les VBO (Vertex Buffer Objects) ou pour vos textures.

III. Remerciements

Cet article est une traduction autorisée de l'article paru sur Geeks3D.com.

Je tiens à remercier LittleWhite pour sa relecture lors de la traduction de cet article, ainsi que ClaudeLELOUP pour sa relecture orthographique.