DRI2: report swap events correctly in direct rendered case
[mesa.git] / src / gallium / winsys / xlib / xlib.c
index da722282156480a701bc4c635e3669607ad92634..67617a470d632dbce7827a8941c897d19c4ed9e3 100644 (file)
  */
 
 enum mode {
-   MODE_TRACE,
-   MODE_BRW,
    MODE_CELL,
+   MODE_LLVMPIPE,
    MODE_SOFTPIPE
 };
 
+/* advertise OpenGL support */
+PUBLIC const int st_api_OpenGL = 1;
 
 static enum mode get_mode()
 {
-   if (getenv("XMESA_TRACE"))
-      return MODE_TRACE;
-
-   if (getenv("XMESA_BRW"))
-      return MODE_BRW;
-
 #ifdef GALLIUM_CELL
    if (!getenv("GALLIUM_NOCELL")) 
       return MODE_CELL;
 #endif
 
+#if defined(GALLIUM_LLVMPIPE)
+   return MODE_LLVMPIPE;
+#else
    return MODE_SOFTPIPE;
+#endif
 }
 
 static void _init( void ) __attribute__((constructor));
@@ -72,19 +71,14 @@ static void _init( void )
    enum mode xlib_mode = get_mode();
 
    switch (xlib_mode) {
-   case MODE_TRACE:
-#if defined(GALLIUM_TRACE) && defined(GALLIUM_SOFTPIPE)
-      xmesa_set_driver( &xlib_trace_driver );
-#endif
-      break;
-   case MODE_BRW:
-#if defined(GALLIUM_BRW)
-      xmesa_set_driver( &xlib_brw_driver );
-#endif
-      break;
    case MODE_CELL:
 #if defined(GALLIUM_CELL)
       xmesa_set_driver( &xlib_cell_driver );
+#endif
+      break;
+   case MODE_LLVMPIPE:
+#if defined(GALLIUM_LLVMPIPE)
+      xmesa_set_driver( &xlib_llvmpipe_driver );
 #endif
       break;
    case MODE_SOFTPIPE:
@@ -111,3 +105,34 @@ extern void (*linker_foo(const unsigned char *procName))()
 {
    return glXGetProcAddress(procName);
 }
+
+
+/**
+ * When GLX_INDIRECT_RENDERING is defined, some symbols are missing in
+ * libglapi.a.  We need to define them here.
+ */
+#ifdef GLX_INDIRECT_RENDERING
+
+#define GL_GLEXT_PROTOTYPES
+#include "GL/gl.h"
+#include "glapi/glapi.h"
+#include "glapi/glapitable.h"
+#include "glapi/glapidispatch.h"
+
+#if defined(USE_MGL_NAMESPACE)
+#define NAME(func)  mgl##func
+#else
+#define NAME(func)  gl##func
+#endif
+
+#define DISPATCH(FUNC, ARGS, MESSAGE)          \
+   CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+
+#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)   \
+   return CALL_ ## FUNC(GET_DISPATCH(), ARGS);
+
+/* skip normal ones */
+#define _GLAPI_SKIP_NORMAL_ENTRY_POINTS
+#include "glapi/glapitemp.h"
+
+#endif /* GLX_INDIRECT_RENDERING */