Merge commit 'origin/gallium-0.1' into gallium-0.2
[mesa.git] / src / mesa / drivers / dri / r300 / radeon_ioctl.c
index 866b1deaa057794a256f194c6a39e45473727c2d..36502eb42de9882c576d65e225974d9b6b107d14 100644 (file)
@@ -35,10 +35,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <sched.h>
 #include <errno.h>
 
-#include "glheader.h"
-#include "imports.h"
-#include "macros.h"
-#include "context.h"
+#include "main/glheader.h"
+#include "main/imports.h"
+#include "main/macros.h"
+#include "main/context.h"
 #include "swrast/swrast.h"
 #include "r300_context.h"
 #include "radeon_ioctl.h"
@@ -164,6 +164,7 @@ void radeonCopyBuffer(__DRIdrawablePrivate * dPriv,
        GLint nbox, i, ret;
        GLboolean missed_target;
        int64_t ust;
+       __DRIscreenPrivate *psp = dPriv->driScreenPriv;
 
        assert(dPriv);
        assert(dPriv->driContextPriv);
@@ -214,16 +215,18 @@ void radeonCopyBuffer(__DRIdrawablePrivate * dPriv,
                        if (rect->y2 < b->y2)
                            b->y2 = rect->y2;
 
-                       if (b->x1 < b->x2 && b->y1 < b->y2)
-                           b++;
+                       if (b->x1 >= b->x2 || b->y1 >= b->y2)
+                           continue;
                    }
-                   else
-                       b++;
 
+                   b++;
                    n++;
                }
                radeon->sarea->nbox = n;
 
+               if (!n)
+                  continue;
+
                ret = drmCommandNone(radeon->dri.fd, DRM_RADEON_SWAP);
 
                if (ret) {
@@ -240,7 +243,7 @@ void radeonCopyBuffer(__DRIdrawablePrivate * dPriv,
            ((r300ContextPtr)radeon)->hw.all_dirty = GL_TRUE;
 
            radeon->swap_count++;
-           (*dri_interface->getUST) (&ust);
+           (*psp->systemTime->getUST) (&ust);
            if (missed_target) {
                radeon->swap_missed_count++;
                radeon->swap_missed_ust = ust - radeon->swap_ust;
@@ -257,6 +260,7 @@ void radeonPageFlip(__DRIdrawablePrivate * dPriv)
        radeonContextPtr radeon;
        GLint ret;
        GLboolean missed_target;
+       __DRIscreenPrivate *psp = dPriv->driScreenPriv;
 
        assert(dPriv);
        assert(dPriv->driContextPriv);
@@ -295,7 +299,7 @@ void radeonPageFlip(__DRIdrawablePrivate * dPriv)
        driWaitForVBlank(dPriv, &missed_target);
        if (missed_target) {
                radeon->swap_missed_count++;
-               (void)(*dri_interface->getUST) (&radeon->swap_missed_ust);
+               (void)(*psp->systemTime->getUST) (&radeon->swap_missed_ust);
        }
        LOCK_HARDWARE(radeon);
 
@@ -309,7 +313,7 @@ void radeonPageFlip(__DRIdrawablePrivate * dPriv)
        }
 
        radeon->swap_count++;
-       (void)(*dri_interface->getUST) (&radeon->swap_ust);
+       (void)(*psp->systemTime->getUST) (&radeon->swap_ust);
 
         driFlipRenderbuffers(radeon->glCtx->WinSysDrawBuffer, 
                              radeon->sarea->pfCurrentPage);