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