swrastg: Add SWRAST_NO_PRESENT option to not send updates to X server
authorJakob Bornecrantz <wallbraker@gmail.com>
Tue, 27 Jul 2010 04:16:05 +0000 (21:16 -0700)
committerJakob Bornecrantz <wallbraker@gmail.com>
Tue, 27 Jul 2010 20:54:37 +0000 (13:54 -0700)
There seem to be a problem with this path and freeglut where
the window wont open if SWRAST_NO_PRESENT is set to true.

src/gallium/state_trackers/dri/sw/drisw.c

index 23e99aa0addec4adb4c2fa85b94352011f321551..86297c3f80c944ca19cb6df0b2567876f8055911 100644 (file)
@@ -46,6 +46,8 @@
 #include "dri1_helper.h"
 #include "drisw.h"
 
+DEBUG_GET_ONCE_BOOL_OPTION(swrast_no_present, "SWRAST_NO_PRESENT", FALSE);
+static boolean swrast_no_present = FALSE;
 
 static INLINE void
 get_drawable_info(__DRIdrawable *dPriv, int *w, int *h)
@@ -95,6 +97,9 @@ drisw_present_texture(__DRIdrawable *dPriv,
    struct dri_screen *screen = dri_screen(drawable->sPriv);
    struct pipe_surface *psurf;
 
+   if (swrast_no_present)
+      return;
+
    psurf = dri1_get_pipe_surface(drawable, ptex);
    if (!psurf)
       return;
@@ -215,7 +220,8 @@ drisw_allocate_textures(struct dri_drawable *drawable,
 
       dri_drawable_get_format(drawable, statts[i], &format, &bind);
 
-      if (statts[i] != ST_ATTACHMENT_DEPTH_STENCIL)
+      /* if we don't do any present, no need for display targets */
+      if (statts[i] != ST_ATTACHMENT_DEPTH_STENCIL && !swrast_no_present)
          bind |= PIPE_BIND_DISPLAY_TARGET;
 
       if (format == PIPE_FORMAT_NONE)
@@ -261,6 +267,8 @@ drisw_init_screen(__DRIscreen * sPriv)
    screen->update_drawable_info = drisw_update_drawable_info;
    screen->flush_frontbuffer = drisw_flush_frontbuffer;
 
+   swrast_no_present = debug_get_option_swrast_no_present();
+
    sPriv->private = (void *)screen;
    sPriv->extensions = drisw_screen_extensions;