intel: remove a buffer equality test in _mesa_make_current()
authorBrian Paul <brianp@vmware.com>
Mon, 5 Oct 2009 20:07:29 +0000 (14:07 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 5 Oct 2009 20:07:29 +0000 (14:07 -0600)
Before, if we called glXMakeCurrent() to change a context's window binding
while an FBO was bound, we weren't updating the intel->driDrawable and
intel->driReadDrawable fields.  This could cause us to dereference a null
pointer elsewhere.

src/mesa/drivers/dri/intel/intel_context.c

index fce42e9c2d65d98bd3ab9ec5d7e4743217f98f79..c49f06e44a4fbdf19f11009a82e21127f0067ce5 100644 (file)
@@ -993,41 +993,35 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
 
       _mesa_make_current(&intel->ctx, &intel_fb->Base, readFb);
 
-      /* The drawbuffer won't always be updated by _mesa_make_current: 
-       */
-      if (intel->ctx.DrawBuffer == &intel_fb->Base) {
-
-        if (intel->driReadDrawable != driReadPriv)
-           intel->driReadDrawable = driReadPriv;
-
-        if (intel->driDrawable != driDrawPriv) {
-           if (driDrawPriv->swap_interval == (unsigned)-1) {
-              int i;
-
-              driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
-                 ? driGetDefaultVBlankFlags(&intel->optionCache)
-                : VBLANK_FLAG_NO_IRQ;
-
-              /* Prevent error printf if one crtc is disabled, this will
-               * be properly calculated in intelWindowMoved() next.
-               */
-               driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
-
-              (*psp->systemTime->getUST) (&intel_fb->swap_ust);
-              driDrawableInitVBlank(driDrawPriv);
-              intel_fb->vbl_waited = driDrawPriv->vblSeq;
-
-              for (i = 0; i < 2; i++) {
-                 if (intel_fb->color_rb[i])
-                    intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
-              }
-           }
-           intel->driDrawable = driDrawPriv;
-           intelWindowMoved(intel);
-        }
+      intel->driReadDrawable = driReadPriv;
+
+      if (intel->driDrawable != driDrawPriv) {
+         if (driDrawPriv->swap_interval == (unsigned)-1) {
+            int i;
+
+            driDrawPriv->vblFlags = (intel->intelScreen->irq_active != 0)
+               ? driGetDefaultVBlankFlags(&intel->optionCache)
+               : VBLANK_FLAG_NO_IRQ;
 
-        intel_draw_buffer(&intel->ctx, &intel_fb->Base);
+            /* Prevent error printf if one crtc is disabled, this will
+             * be properly calculated in intelWindowMoved() next.
+             */
+            driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
+
+            (*psp->systemTime->getUST) (&intel_fb->swap_ust);
+            driDrawableInitVBlank(driDrawPriv);
+            intel_fb->vbl_waited = driDrawPriv->vblSeq;
+
+            for (i = 0; i < 2; i++) {
+               if (intel_fb->color_rb[i])
+                  intel_fb->color_rb[i]->vbl_pending = driDrawPriv->vblSeq;
+            }
+         }
+         intel->driDrawable = driDrawPriv;
+         intelWindowMoved(intel);
       }
+
+      intel_draw_buffer(&intel->ctx, &intel_fb->Base);
    }
    else {
       _mesa_make_current(NULL, NULL, NULL);