GLX broken?

vehemens vehemens at verizon.net
Mon Nov 6 08:53:14 UTC 2006


Try 2.  Got to love mailers

--- hw/xfree86/dri/dri.c.orig   Fri Oct 13 15:52:55 2006
+++ hw/xfree86/dri/dri.c        Mon Oct 30 22:06:48 2006
@@ -1577,8 +1577,12 @@
        /* unwrap */
        pScreen->WindowExposures = pDRIPriv->wrap.WindowExposures;

+       DRILock(pScreen, 0);
+
        /* call lower layers */
        (*pScreen->WindowExposures)(pWin, prgn, bsreg);
+
+       DRIUnlock(pScreen);

        /* rewrap */
        pDRIPriv->wrap.WindowExposures = pScreen->WindowExposures;

--- /usr/cvsup/xorg_current/mesa/drm/shared-core/radeon_cp.c    Sat Sep 16 
00:01:49 2006
+++ /usr/cvsup/drm-mine/shared-core/radeon_cp.c Sun Oct 22 03:54:49 2006
@@ -1937,7 +1937,7 @@
        drm_radeon_private_t *dev_priv = dev->dev_private;
        DRM_DEBUG("\n");

-       LOCK_TEST_WITH_RETURN(dev, filp);
+//     LOCK_TEST_WITH_RETURN(dev, filp);

        return radeon_do_cp_idle(dev_priv);
 }
@@ -1956,7 +1956,7 @@
        DRM_DEVICE;
        DRM_DEBUG("\n");

-       LOCK_TEST_WITH_RETURN(dev, filp);
+//     LOCK_TEST_WITH_RETURN(dev, filp);
 
        return radeon_do_engine_reset(dev);
 }
@@ -2150,7 +2150,7 @@
        drm_dma_t __user *argp = (void __user *)data;
        drm_dma_t d;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+//     LOCK_TEST_WITH_RETURN(dev, filp);
 
        DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));


--- /usr/cvsup/xorg_current/mesa/drm/shared-core/radeon_state.c Mon Oct  9 
21:05:51 2006
+++ /usr/cvsup/drm-mine/shared-core/radeon_state.c      Mon Oct 23 16:28:43 
2006
@@ -1358,10 +1358,9 @@
        /* Wait for the 3D stream to idle before dispatching the bitblt.
         * This will prevent data corruption between the two streams.
         */
-       BEGIN_RING(2);
-
-       RADEON_WAIT_UNTIL_3D_IDLE();

+       BEGIN_RING(2);
+       RADEON_WAIT_UNTIL_IDLE();
        ADVANCE_RING();

        for (i = 0; i < nbox; i++) {
@@ -2485,7 +2484,7 @@
        drm_radeon_indirect_t indirect;
        RING_LOCALS;
 
-       LOCK_TEST_WITH_RETURN(dev, filp);
+//     LOCK_TEST_WITH_RETURN(dev, filp);
 
        if (!dev_priv) {
                DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
@@ -2911,6 +2910,7 @@
        drm_radeon_cmd_header_t header;
        int orig_nbox, orig_bufsz;
        char *kbuf = NULL;
+       RING_LOCALS;
 
        LOCK_TEST_WITH_RETURN(dev, filp);
 
@@ -2950,6 +2950,14 @@
        }
 
        orig_nbox = cmdbuf.nbox;
+
+       /* Wait for the engine to idle before the indirect buffer
+        * is processed.
+        */
+
+       BEGIN_RING(2);
+       RADEON_WAIT_UNTIL_IDLE();
+       ADVANCE_RING();
 
        if (dev_priv->microcode_version == UCODE_R300) {
                int temp;


More information about the freebsd-x11 mailing list