OSDN Git Service

radeon: update flush according to glXMakeCurrent man page
authorDave Airlie <airlied@redhat.com>
Fri, 11 Nov 2011 15:55:30 +0000 (15:55 +0000)
committerDave Airlie <airlied@redhat.com>
Mon, 5 Dec 2011 11:31:15 +0000 (11:31 +0000)
This also copies code from intel driver to do this.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/drivers/dri/radeon/radeon_common_context.c

index bb0168e..ceaefda 100644 (file)
@@ -38,6 +38,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "drivers/common/meta.h"
 #include "main/context.h"
 #include "main/framebuffer.h"
+#include "main/fbobject.h"
 #include "main/renderbuffer.h"
 #include "main/state.h"
 #include "main/simple_list.h"
@@ -564,8 +565,22 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,
                            __DRIdrawable * driReadPriv)
 {
        radeonContextPtr radeon;
+       GET_CURRENT_CONTEXT(curCtx);
        struct gl_framebuffer *drfb, *readfb;
 
+       if (driContextPriv)
+               radeon = (radeonContextPtr)driContextPriv->driverPrivate;
+       else
+               radeon = NULL;
+       /* According to the glXMakeCurrent() man page: "Pending commands to
+        * the previous context, if any, are flushed before it is released."
+        * But only flush if we're actually changing contexts.
+        */
+
+       if ((radeonContextPtr)curCtx && (radeonContextPtr)curCtx != radeon) {
+               _mesa_flush(curCtx);
+       }
+
        if (!driContextPriv) {
                if (RADEON_DEBUG & RADEON_DRI)
                        fprintf(stderr, "%s ctx is null\n", __FUNCTION__);
@@ -573,8 +588,6 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,
                return GL_TRUE;
        }
 
-       radeon = (radeonContextPtr) driContextPriv->driverPrivate;
-
        if(driDrawPriv == NULL && driReadPriv == NULL) {
                drfb = _mesa_create_framebuffer(&radeon->glCtx->Visual);
                readfb = drfb;