Merge remote branch 'origin/master' into pipe-video
[mesa.git] / include / GL / glx.h
index f9feb7fd1de3e40c299e40d35de0a43e9041a75e..a3a7d97c9328d824bac8d62cc39420311b005953 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.3
+ * Version:  6.5
  * 
- * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  * 
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -186,6 +186,16 @@ typedef XID GLXWindow;
 typedef XID GLXPbuffer;
 
 
+/*
+** Events.
+** __GLX_NUMBER_EVENTS is set to 17 to account for the BufferClobberSGIX
+**  event - this helps initialization if the server supports the pbuffer
+**  extension and the client doesn't.
+*/
+#define GLX_PbufferClobber     0
+#define GLX_BufferSwapComplete 1
+
+#define __GLX_NUMBER_EVENTS 17
 
 extern XVisualInfo* glXChooseVisual( Display *dpy, int screen,
                                     int *attribList );
@@ -290,237 +300,224 @@ extern void glXSelectEvent( Display *dpy, GLXDrawable drawable,
 extern void glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,
                                  unsigned long *mask );
 
-
-/* GLX 1.4 and later */
-extern void (*glXGetProcAddress(const GLubyte *procname))( void );
-
-
-#ifndef GLX_GLXEXT_LEGACY
-
-#include <GL/glxext.h>
-
-#else
+/* GLX 1.3 function pointer typedefs */
+typedef GLXFBConfig * (* PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef GLXFBConfig * (* PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef int (* PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef XVisualInfo * (* PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef GLXWindow (* PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void (* PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXPixmap (* PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef void (* PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef GLXPbuffer (* PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef void (* PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void (* PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef GLXContext (* PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef Bool (* PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable (* PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef Display * (* PFNGLXGETCURRENTDISPLAYPROC) (void);
+typedef int (* PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void (* PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+typedef void (* PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
 
 
 /*
- * 28. GLX_EXT_visual_info extension
- */
-#ifndef GLX_EXT_visual_info
-#define GLX_EXT_visual_info            1
-
-#define GLX_X_VISUAL_TYPE_EXT          0x22
-#define GLX_TRANSPARENT_TYPE_EXT       0x23
-#define GLX_TRANSPARENT_INDEX_VALUE_EXT        0x24
-#define GLX_TRANSPARENT_RED_VALUE_EXT  0x25
-#define GLX_TRANSPARENT_GREEN_VALUE_EXT        0x26
-#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27
-#define GLX_TRANSPARENT_ALPHA_VALUE_EXT        0x28
-#define GLX_TRUE_COLOR_EXT             0x8002
-#define GLX_DIRECT_COLOR_EXT           0x8003
-#define GLX_PSEUDO_COLOR_EXT           0x8004
-#define GLX_STATIC_COLOR_EXT           0x8005
-#define GLX_GRAY_SCALE_EXT             0x8006
-#define GLX_STATIC_GRAY_EXT            0x8007
-#define GLX_NONE_EXT                   0x8000
-#define GLX_TRANSPARENT_RGB_EXT                0x8008
-#define GLX_TRANSPARENT_INDEX_EXT      0x8009
-
-#endif /* 28. GLX_EXT_visual_info extension */
-
-
-
-/*
- * 41. GLX_SGI_video_sync
- */
-#ifndef GLX_SGI_video_sync
-#define GLX_SGI_video_sync 1
-
-extern int glXGetVideoSyncSGI(unsigned int *count);
-extern int glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count);
-
-#endif /* GLX_SGI_video_sync */
-
-
-
-/*
- * 42. GLX_EXT_visual_rating
+ * ARB 2. GLX_ARB_get_proc_address
  */
-#ifndef GLX_EXT_visual_rating
-#define GLX_EXT_visual_rating          1
-
-#define GLX_VISUAL_CAVEAT_EXT          0x20
-/*#define GLX_NONE_EXT                 0x8000*/
-#define GLX_SLOW_VISUAL_EXT            0x8001
-#define GLX_NON_CONFORMANT_VISUAL_EXT  0x800D
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
 
-#endif /* GLX_EXT_visual_rating        */
+typedef void (*__GLXextFuncPtr)(void);
+extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *);
 
+#endif /* GLX_ARB_get_proc_address */
 
 
-/*
- * 47. GLX_EXT_import_context
- */
-#ifndef GLX_EXT_import_context
-#define GLX_EXT_import_context 1
 
-#define GLX_SHARE_CONTEXT_EXT          0x800A
-#define GLX_VISUAL_ID_EXT              0x800B
-#define GLX_SCREEN_EXT                 0x800C
+/* GLX 1.4 and later */
+extern void (*glXGetProcAddress(const GLubyte *procname))( void );
 
-extern void glXFreeContextEXT(Display *dpy, GLXContext context);
+/* GLX 1.4 function pointer typedefs */
+typedef __GLXextFuncPtr (* PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
 
-extern GLXContextID glXGetContextIDEXT(const GLXContext context);
 
-extern Display *glXGetCurrentDisplayEXT(void);
+#ifndef GLX_GLXEXT_LEGACY
 
-extern GLXContext glXImportContextEXT(Display *dpy, GLXContextID contextID);
+#include <GL/glxext.h>
 
-extern int glXQueryContextInfoEXT(Display *dpy, GLXContext context,
-                                  int attribute,int *value);
+#endif /* GLX_GLXEXT_LEGACY */
 
-#endif /* GLX_EXT_import_context */
 
+/**
+ ** The following aren't in glxext.h yet.
+ **/
 
 
 /*
- * 215. GLX_MESA_copy_sub_buffer
+ * ???. GLX_NV_vertex_array_range
  */
-#ifndef GLX_MESA_copy_sub_buffer
-#define GLX_MESA_copy_sub_buffer 1
-
-extern void glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable,
-                                  int x, int y, int width, int height );
+#ifndef GLX_NV_vertex_array_range
+#define GLX_NV_vertex_array_range
 
-#endif
+extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+extern void glXFreeMemoryNV(GLvoid *pointer);
+typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);
 
+#endif /* GLX_NV_vertex_array_range */
 
 
 /*
- * 216. GLX_MESA_pixmap_colormap
+ * ARB ?. GLX_ARB_render_texture
+ * XXX This was never finalized!
  */
-#ifndef GLX_MESA_pixmap_colormap
-#define GLX_MESA_pixmap_colormap 1
-
-extern GLXPixmap glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visual,
-                                         Pixmap pixmap, Colormap cmap );
+#ifndef GLX_ARB_render_texture
+#define GLX_ARB_render_texture 1
 
-#endif /* GLX_MESA_pixmap_colormap */
+extern Bool glXBindTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
+extern Bool glXReleaseTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
+extern Bool glXDrawableAttribARB(Display *dpy, GLXDrawable draw, const int *attribList);
 
+#endif /* GLX_ARB_render_texture */
 
 
 /*
- * 217. GLX_MESA_release_buffers
+ * Remove this when glxext.h is updated.
  */
-#ifndef GLX_MESA_release_buffers
-#define GLX_MESA_release_buffers 1
+#ifndef GLX_NV_float_buffer
+#define GLX_NV_float_buffer 1
 
-extern Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d );
+#define GLX_FLOAT_COMPONENTS_NV         0x20B0
 
-#endif /* GLX_MESA_release_buffers */
+#endif /* GLX_NV_float_buffer */
 
 
 
 /*
- * 218. GLX_MESA_set_3dfx_mode
+ * #?. GLX_MESA_swap_frame_usage
  */
-#ifndef GLX_MESA_set_3dfx_mode
-#define GLX_MESA_set_3dfx_mode 1
+#ifndef GLX_MESA_swap_frame_usage
+#define GLX_MESA_swap_frame_usage 1
 
-#define GLX_3DFX_WINDOW_MODE_MESA       0x1
-#define GLX_3DFX_FULLSCREEN_MODE_MESA   0x2
+extern int glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable, float *usage);
+extern int glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
+extern int glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
+extern int glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
 
-extern Bool glXSet3DfxModeMESA( int mode );
+typedef int (*PFNGLXGETFRAMEUSAGEMESAPROC) (Display *dpy, GLXDrawable drawable, float *usage);
+typedef int (*PFNGLXBEGINFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
+typedef int (*PFNGLXENDFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
+typedef int (*PFNGLXQUERYFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
 
-#endif /* GLX_MESA_set_3dfx_mode */
+#endif /* GLX_MESA_swap_frame_usage */
 
 
 
 /*
- * ARB 2. GLX_ARB_get_proc_address
+ * #?. GLX_MESA_swap_control
  */
-#ifndef GLX_ARB_get_proc_address
-#define GLX_ARB_get_proc_address 1
-
-extern void (*glXGetProcAddressARB(const GLubyte *procName))();
-
-#endif /* GLX_ARB_get_proc_address */
+#ifndef GLX_MESA_swap_control
+#define GLX_MESA_swap_control 1
 
+extern int glXSwapIntervalMESA(unsigned int interval);
+extern int glXGetSwapIntervalMESA(void);
 
+typedef int (*PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval);
+typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void);
 
-#endif /* GLX_GLXEXT_LEGACY */
+#endif /* GLX_MESA_swap_control */
 
 
-/**
- ** The following aren't in glxext.h yet.
- **/
-
 
 /*
- * ???. GLX_NV_vertex_array_range
+ * #?. GLX_EXT_texture_from_pixmap
+ * XXX not finished?
  */
-#ifndef GLX_NV_vertex_array_range
-#define GLX_NV_vertex_array_range
-
-extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
-extern void glXFreeMemoryNV(GLvoid *pointer);
-typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
-typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_EXT_texture_from_pixmap 1
 
-#endif /* GLX_NV_vertex_array_range */
+#define GLX_BIND_TO_TEXTURE_RGB_EXT        0x20D0
+#define GLX_BIND_TO_TEXTURE_RGBA_EXT       0x20D1
+#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT     0x20D2
+#define GLX_BIND_TO_TEXTURE_TARGETS_EXT    0x20D3
+#define GLX_Y_INVERTED_EXT                 0x20D4
 
+#define GLX_TEXTURE_FORMAT_EXT             0x20D5
+#define GLX_TEXTURE_TARGET_EXT             0x20D6
+#define GLX_MIPMAP_TEXTURE_EXT             0x20D7
 
+#define GLX_TEXTURE_FORMAT_NONE_EXT        0x20D8
+#define GLX_TEXTURE_FORMAT_RGB_EXT         0x20D9
+#define GLX_TEXTURE_FORMAT_RGBA_EXT        0x20DA
 
-/*
- * ???. GLX_MESA_agp_offset
- */ 
-#ifndef GLX_MESA_agp_offset
-#define GLX_MESA_agp_offset 1
+#define GLX_TEXTURE_1D_BIT_EXT             0x00000001
+#define GLX_TEXTURE_2D_BIT_EXT             0x00000002
+#define GLX_TEXTURE_RECTANGLE_BIT_EXT      0x00000004
 
-extern GLuint glXGetAGPOffsetMESA(const GLvoid *pointer);
-typedef GLuint (* PFNGLXGETAGPOFFSETMESAPROC) (const GLvoid *pointer);
+#define GLX_TEXTURE_1D_EXT                 0x20DB
+#define GLX_TEXTURE_2D_EXT                 0x20DC
+#define GLX_TEXTURE_RECTANGLE_EXT          0x20DD
 
-#endif /* GLX_MESA_agp_offset */
+#define GLX_FRONT_LEFT_EXT                 0x20DE
+#define GLX_FRONT_RIGHT_EXT                0x20DF
+#define GLX_BACK_LEFT_EXT                  0x20E0
+#define GLX_BACK_RIGHT_EXT                 0x20E1
+#define GLX_FRONT_EXT                      GLX_FRONT_LEFT_EXT
+#define GLX_BACK_EXT                       GLX_BACK_LEFT_EXT
+#define GLX_AUX0_EXT                       0x20E2
+#define GLX_AUX1_EXT                       0x20E3 
+#define GLX_AUX2_EXT                       0x20E4 
+#define GLX_AUX3_EXT                       0x20E5 
+#define GLX_AUX4_EXT                       0x20E6 
+#define GLX_AUX5_EXT                       0x20E7 
+#define GLX_AUX6_EXT                       0x20E8
+#define GLX_AUX7_EXT                       0x20E9 
+#define GLX_AUX8_EXT                       0x20EA 
+#define GLX_AUX9_EXT                       0x20EB
 
+extern void glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
+extern void glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer);
 
-/*
- * ???. GLX_MESA_allocate_memory
- */ 
-#ifndef GLX_MESA_allocate_memory
-#define GLX_MESA_allocate_memory 1
+#endif /* GLX_EXT_texture_from_pixmap */
 
-extern void *glXAllocateMemoryMESA(Display *dpy, int scrn, size_t size, float readfreq, float writefreq, float priority);
-extern void glXFreeMemoryMESA(Display *dpy, int scrn, void *pointer);
-extern GLuint glXGetMemoryOffsetMESA(Display *dpy, int scrn, const void *pointer);
-typedef void * ( * PFNGLXALLOCATEMEMORYMESAPROC) (Display *dpy, int scrn, size_t size, float readfreq, float writefreq, float priority);
-typedef void ( * PFNGLXFREEMEMORYMESAPROC) (Display *dpy, int scrn, void *pointer);
-typedef GLuint (* PFNGLXGETMEMORYOFFSETMESAPROC) (Display *dpy, int scrn, const void *pointer);
-
-#endif /* GLX_MESA_allocate_memory */
-
-/*
- * ARB ?. GLX_ARB_render_texture
- */
-#ifndef GLX_ARB_render_texture
-#define GLX_ARB_render_texture 1
-
-extern Bool glXBindTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
-extern Bool glXReleaseTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
-extern Bool glXDrawableAttribARB(Display *dpy, GLXDrawable draw, const int *attribList);
 
-#endif /* GLX_ARB_render_texture */
 
 
+/*** Should these go here, or in another header? */
 /*
- * Remove this when glxext.h is updated.
- */
-#ifndef GLX_NV_float_buffer
-#define GLX_NV_float_buffer 1
-
-#define GLX_FLOAT_COMPONENTS_NV         0x20B0
-
-#endif /* GLX_NV_float_buffer */
-
-
+** GLX Events
+*/
+typedef struct {
+    int event_type;            /* GLX_DAMAGED or GLX_SAVED */
+    int draw_type;             /* GLX_WINDOW or GLX_PBUFFER */
+    unsigned long serial;      /* # of last request processed by server */
+    Bool send_event;           /* true if this came for SendEvent request */
+    Display *display;          /* display the event was read from */
+    GLXDrawable drawable;      /* XID of Drawable */
+    unsigned int buffer_mask;  /* mask indicating which buffers are affected */
+    unsigned int aux_buffer;   /* which aux buffer was affected */
+    int x, y;
+    int width, height;
+    int count;                 /* if nonzero, at least this many more */
+} GLXPbufferClobberEvent;
+
+typedef struct {
+    int type;
+    unsigned long serial;      /* # of last request processed by server */
+    Bool send_event;           /* true if this came from a SendEvent request */
+    Display *display;          /* Display the event was read from */
+    GLXDrawable drawable;      /* drawable on which event was requested in event mask */
+    int event_type;
+    int64_t ust;
+    int64_t msc;
+    int64_t sbc;
+} GLXBufferSwapComplete;
+
+typedef union __GLXEvent {
+    GLXPbufferClobberEvent glxpbufferclobber;
+    GLXBufferSwapComplete glxbufferswapcomplete;
+    long pad[24];
+} GLXEvent;
 
 #ifdef __cplusplus
 }