//#include "ati_meminfo.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

#define HAVE_GLGL
#define HAVE_GLGLUT
#define HAVE_GLGLX

#ifdef HAVE_GLGL
    #include <GL/gl.h>
#elif HAVE_OPENGLGL
    #include <OpenGL/gl.h>
#endif

#ifdef HAVE_GLGLX
    #include <GL/glx.h>
#elif HAVE_OPENGLGLX
    #include <OpenGL/glx.h>
#endif

#ifdef HAVE_GLGLUT
    #include <GL/glut.h>
#elif HAVE_OPENGLGLUT
    #include <OpenGL/glut.h>
#endif




//#include <GL/glut.h>
//#include <GL/gl.h>

#define VBO_FREE_MEMORY_ATI          0x87FB
#define TEXTURE_FREE_MEMORY_ATI      0x87FC
#define RENDERBUFFER_FREE_MEMORY_ATI 0x87FD

void ati_meminfo(void){
  int64_t param[4];

  glGetInteger64v (VBO_FREE_MEMORY_ATI, (GLint64 *)param);
  printf ("VBO_FREE_MEMORY_ATI\n");
  printf ("  Total memory free in the pool: %"PRIu64" Kbyte\n", param[0]);
  printf ("  Largest available free block in the pool: %"PRIu64" Kbyte\n", param[1]);
  printf ("  Total auxiliary memory free: %"PRIu64" Kbyte\n", param[2]);
  printf ("  Largest auxiliary free block: %"PRIu64" Kbyte\n", param[3]);
  printf ("\n");

  glGetInteger64v (TEXTURE_FREE_MEMORY_ATI, (GLint64 *)param);
  printf ("TEXTURE_FREE_MEMORY_ATI\n");
  printf ("  Total memory free in the pool: %"PRIu64" Kbyte\n", param[0]);
  printf ("  Largest available free block in the pool: %"PRIu64" Kbyte\n", param[1]);
  printf ("  Total auxiliary memory free: %"PRIu64" Kbyte\n", param[2]);
  printf ("  Largest auxiliary free block: %"PRIu64" Kbyte\n", param[3]);
  printf ("\n");

  glGetInteger64v (RENDERBUFFER_FREE_MEMORY_ATI, (GLint64 *)param);
  printf ("RENDERBUFFER_FREE_MEMORY_ATI\n");
  printf ("  Total memory free in the pool: %"PRIu64" Kbyte\n", param[0]);
  printf ("  Largest available free block in the pool: %"PRIu64" Kbyte\n", param[1]);
  printf ("  Total auxiliary memory free: %"PRIu64" Kbyte\n", param[2]);
  printf ("  Largest auxiliary free block: %"PRIu64" Kbyte\n", param[3]);
  printf ("\n");

  return;
}

int main(int argc, char **argv){

	ati_meminfo();

	return 0;
}