Hello community,
here is the log from the commit of package xgl
checked in at Mon May 15 12:59:37 CEST 2006.
--------
--- xgl/xgl.changes 2006-05-08 01:11:18.000000000 +0200
+++ STABLE/xgl/xgl.changes 2006-05-12 15:57:43.000000000 +0200
@@ -1,0 +2,9 @@
+Fri May 12 15:50:19 CEST 2006 - dreveman@suse.de
+
+- Fix issue with gradients that could crash the server.
+- Fix so that XVideo works when dimensions are not multiple of 8.
+- Fix GLX drawable destruction. (bnc 174253)
+- Update to new version of Mesa. Old version had a vertex array bug
+ that could cause the server to crash.
+
+-------------------------------------------------------------------
Old:
----
Mesa-CVS-20060502.tar.bz2
New:
----
Mesa-CVS-20060512.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xgl.spec ++++++
--- /var/tmp/diff_new_pack.ieOrjd/_old 2006-05-15 12:58:20.000000000 +0200
+++ /var/tmp/diff_new_pack.ieOrjd/_new 2006-05-15 12:58:20.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package xgl (Version cvs_060507)
+# spec file for package xgl (Version cvs_060512)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -23,8 +23,8 @@
PreReq: %fillup_prereq
Requires: xgl-hardware-list
Autoreqprov: on
-Version: cvs_060507
-Release: 2
+Version: cvs_060512
+Release: 1
Summary: Xserver that uses OpenGL for its drawing operations.
BuildRoot: %{_tmppath}/%{name}-%{version}-build
ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64
@@ -32,7 +32,7 @@
Source1: glitz-0.5.4.tar.gz
Source2: README.SUSE
Source3: sysconfig.displaymanager.template
-Source4: Mesa-CVS-20060502.tar.bz2
+Source4: Mesa-CVS-20060512.tar.bz2
Source6: fixesproto-4.0.tar.bz2
Source7: compositeproto-0.3.tar.bz2
Source8: scrnsaverproto-1.1.0.tar.bz2
@@ -143,6 +143,12 @@
/var/adm/fillup-templates/sysconfig.displaymanager-%name
%changelog -n xgl
+* Fri May 12 2006 - dreveman@suse.de
+- Fix issue with gradients that could crash the server.
+- Fix so that XVideo works when dimensions are not multiple of 8.
+- Fix GLX drawable destruction. (bnc 174253)
+- Update to new version of Mesa. Old version had a vertex array bug
+ that could cause the server to crash.
* Mon May 08 2006 - dreveman@suse.de
- Turn off automatic indicator changes on Xorg server. (bnc 165392)
* Wed May 03 2006 - dreveman@suse.de
++++++ Mesa-CVS-20060502.tar.bz2 -> Mesa-CVS-20060512.tar.bz2 ++++++
++++ 2809 lines of diff (skipped)
++++++ xorg-server-1.1.99.1.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/ChangeLog new/xorg-server-1.1.99.1/ChangeLog
--- old/xorg-server-1.1.99.1/ChangeLog 2006-05-05 11:39:55.000000000 +0200
+++ new/xorg-server-1.1.99.1/ChangeLog 2006-05-11 16:37:01.000000000 +0200
@@ -1,3 +1,40 @@
+2006-05-11 David Reveman
+
+ * composite/compalloc.c (compRedirectWindow): Init borderClipX and
+ borderClipY to shut up valgrind.
+
+ * hw/xgl/glxext/xglglxext.c (xglDestroyDrawable): Destroy mesa
+ drawable when refCount is 0.
+ (xglScreenDestroy): Use screen destroy function.
+
+ * GL/mesa/X/xf86glx.c: We have to keep a references to all drawables
+ bound to a context as mesa need them until the context has been
+ updated with new drawables or has been destroyed.
+ (__glXMesaDrawableDestroy): Drawable might already be destroyed
+ mesa should not touch it.
+ (__glXMesaDrawableResize): XMesaResizeBuffers will update
+ the current context so only call it if the drawable we're
+ resizing is bound to the current context. It will be updated when
+ the context is made current if it's not bound to the current context.
+
+ * GL/glx/glxutil.c (__glXUnrefDrawable): Don't free resource here.
+
+ * GL/glx/glxscreens.c (PositionWindow): Flush context cache and
+ notify all context using drawable.
+
+ * GL/glx/glxext.c (DrawableGone): Free GLX drawable resource here
+ so that GLXdrawables can be ref-counted.
+
+2006-05-10 David Reveman
+
+ * hw/xgl/xglcompose.c (xglCompositeGeneral): Only use copy optimization
+ when source picture got a drawable.
+
+2006-05-09 David Reveman
+
+ * hw/xgl/xglxv.c (xglXvPutImage): Stride should be padded to a
+ multiple of 8.
+
2006-05-05 David Reveman
* hw/xgl/glx/xglx.c (xglxKbdCtrl): No need to go through more than
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/GL/glx/glxext.c new/xorg-server-1.1.99.1/GL/glx/glxext.c
--- old/xorg-server-1.1.99.1/GL/glx/glxext.c 2006-04-09 16:55:38.000000000 +0200
+++ new/xorg-server-1.1.99.1/GL/glx/glxext.c 2006-05-10 22:12:15.000000000 +0200
@@ -181,6 +181,9 @@
}
}
+ /* remove the drawable from the drawable list */
+ FreeResourceByType(glxPriv->drawId, __glXDrawableRes, FALSE);
+
__glXUnrefDrawable(glxPriv);
return True;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/GL/glx/glxscreens.c new/xorg-server-1.1.99.1/GL/glx/glxscreens.c
--- old/xorg-server-1.1.99.1/GL/glx/glxscreens.c 2006-03-30 18:38:10.000000000 +0200
+++ new/xorg-server-1.1.99.1/GL/glx/glxscreens.c 2006-05-11 16:08:09.000000000 +0200
@@ -199,12 +199,15 @@
}
/* mark contexts as needing resize */
+ __glXFlushContextCache ();
for (glxc = glxPriv->drawGlxc; glxc; glxc = glxc->nextDrawPriv) {
+ (*glxc->loseCurrent)(glxc);
glxc->pendingState |= __GLX_PENDING_RESIZE;
}
for (glxc = glxPriv->readGlxc; glxc; glxc = glxc->nextReadPriv) {
+ (*glxc->loseCurrent)(glxc);
glxc->pendingState |= __GLX_PENDING_RESIZE;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/GL/glx/glxutil.c new/xorg-server-1.1.99.1/GL/glx/glxutil.c
--- old/xorg-server-1.1.99.1/GL/glx/glxutil.c 2006-03-30 18:38:11.000000000 +0200
+++ new/xorg-server-1.1.99.1/GL/glx/glxutil.c 2006-05-10 22:11:48.000000000 +0200
@@ -131,11 +131,8 @@
__glXUnrefDrawable(__GLXdrawable *glxPriv)
{
glxPriv->refCount--;
- if (glxPriv->refCount == 0) {
- /* remove the drawable from the drawable list */
- FreeResourceByType(glxPriv->drawId, __glXDrawableRes, FALSE);
+ if (glxPriv->refCount == 0)
glxPriv->destroy(glxPriv);
- }
}
GLboolean
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/GL/mesa/X/xf86glx.c new/xorg-server-1.1.99.1/GL/mesa/X/xf86glx.c
--- old/xorg-server-1.1.99.1/GL/mesa/X/xf86glx.c 2006-03-30 18:38:11.000000000 +0200
+++ new/xorg-server-1.1.99.1/GL/mesa/X/xf86glx.c 2006-05-10 22:32:55.000000000 +0200
@@ -86,6 +86,9 @@
struct __GLXMESAcontext {
__GLXcontext base;
XMesaContext xmesa;
+
+ __GLXMESAdrawable *drawPriv;
+ __GLXMESAdrawable *readPriv;
};
struct __GLXMESAdrawable {
@@ -102,7 +105,10 @@
__GLXMESAdrawable *glxPriv = (__GLXMESAdrawable *) base;
if (glxPriv->xm_buf)
+ {
+ glxPriv->xm_buf->frontxrb->drawable = 0;
XMesaDestroyBuffer(glxPriv->xm_buf);
+ }
xfree(glxPriv);
}
@@ -111,7 +117,8 @@
{
__GLXMESAdrawable *glxPriv = (__GLXMESAdrawable *) base;
- XMesaResizeBuffers(glxPriv->xm_buf);
+ if (XMesaGetCurrentBuffer () == glxPriv->xm_buf)
+ XMesaResizeBuffers(glxPriv->xm_buf);
return GL_TRUE;
}
@@ -214,6 +221,11 @@
{
__GLXMESAcontext *context = (__GLXMESAcontext *) baseContext;
+ if (context->drawPriv)
+ __glXUnrefDrawable (&context->drawPriv->base);
+ if (context->readPriv)
+ __glXUnrefDrawable (&context->readPriv->base);
+
XMesaDestroyContext(context->xmesa);
__glXContextDestroy(context);
xfree(context);
@@ -226,10 +238,24 @@
__GLXMESAcontext *context = (__GLXMESAcontext *) baseContext;
__GLXMESAdrawable *drawPriv = (__GLXMESAdrawable *) context->base.drawPriv;
__GLXMESAdrawable *readPriv = (__GLXMESAdrawable *) context->base.readPriv;
+ int status;
+
+ __glXRefDrawable (&drawPriv->base);
+ __glXRefDrawable (&readPriv->base);
+
+ status = XMesaMakeCurrent2(context->xmesa,
+ drawPriv->xm_buf,
+ readPriv->xm_buf);
+
+ if (context->drawPriv)
+ __glXUnrefDrawable (&context->drawPriv->base);
+ if (context->readPriv)
+ __glXUnrefDrawable (&context->readPriv->base);
+
+ context->drawPriv = drawPriv;
+ context->readPriv = readPriv;
- return XMesaMakeCurrent2(context->xmesa,
- drawPriv->xm_buf,
- readPriv->xm_buf);
+ return status;
}
static int
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/composite/compalloc.c new/xorg-server-1.1.99.1/composite/compalloc.c
--- old/xorg-server-1.1.99.1/composite/compalloc.c 2006-03-30 18:38:14.000000000 +0200
+++ new/xorg-server-1.1.99.1/composite/compalloc.c 2006-05-11 16:35:59.000000000 +0200
@@ -133,6 +133,8 @@
}
REGION_NULL (pScreen, &cw->borderClip);
+ cw->borderClipX = pWin->drawable.x;
+ cw->borderClipY = pWin->drawable.y;
cw->update = CompositeRedirectAutomatic;
cw->clients = 0;
cw->oldx = COMP_ORIGIN_INVALID;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/hw/xgl/glxext/xglglxext.c new/xorg-server-1.1.99.1/hw/xgl/glxext/xglglxext.c
--- old/xorg-server-1.1.99.1/hw/xgl/glxext/xglglxext.c 2006-05-02 02:04:34.000000000 +0200
+++ new/xorg-server-1.1.99.1/hw/xgl/glxext/xglglxext.c 2006-05-10 22:25:22.000000000 +0200
@@ -5583,7 +5583,11 @@
__GLXdrawable *mesaDrawable = pBufferPriv->mesaDrawable;
if (mesaDrawable)
- (*mesaDrawable->destroy) (mesaDrawable);
+ {
+ mesaDrawable->refCount--;
+ if (!mesaDrawable->refCount)
+ (*mesaDrawable->destroy) (mesaDrawable);
+ }
if (pBufferPriv->pGC)
FreeGC (pBufferPriv->pGC, (GContext) 0);
@@ -6351,7 +6355,7 @@
__GLXscreen *mesaScreen = pScreen->mesaScreen;
if (mesaScreen)
- GlxScreenDestroy (mesaScreen);
+ (*mesaScreen->destroy) (mesaScreen);
if (pScreen->GLXextensions)
xfree (pScreen->GLXextensions);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/hw/xgl/xglcompose.c new/xorg-server-1.1.99.1/hw/xgl/xglcompose.c
--- old/xorg-server-1.1.99.1/hw/xgl/xglcompose.c 2006-02-02 01:15:12.000000000 +0100
+++ new/xorg-server-1.1.99.1/hw/xgl/xglcompose.c 2006-05-10 11:45:35.000000000 +0200
@@ -175,9 +175,10 @@
if (!pGeometry)
{
- if (!pSrc->transform && pSrc->filter != PictFilterConvolution)
+ if (pSrc->pDrawable && !pSrc->transform &&
+ pSrc->filter != PictFilterConvolution)
{
- if (pSrc->pDrawable && pSrc->repeatType == RepeatNormal)
+ if (pSrc->repeatType == RepeatNormal)
{
XGL_PIXMAP_PRIV ((PixmapPtr) pSrc->pDrawable);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/hw/xgl/xglxv.c new/xorg-server-1.1.99.1/hw/xgl/xglxv.c
--- old/xorg-server-1.1.99.1/hw/xgl/xglxv.c 2006-04-18 21:54:20.000000000 +0200
+++ new/xorg-server-1.1.99.1/hw/xgl/xglxv.c 2006-05-09 21:46:23.000000000 +0200
@@ -339,7 +339,7 @@
srcWidth, srcHeight,
depth, bpp, -1, (pointer) data);
- XGL_GET_PIXMAP_PRIV (pPortPriv->pPixmap)->stride = -srcWidth;
+ XGL_GET_PIXMAP_PRIV (pPortPriv->pPixmap)->stride = -((srcWidth + 7) & ~7);
pPortPriv->pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/render/mitri.c new/xorg-server-1.1.99.1/render/mitri.c
--- old/xorg-server-1.1.99.1/render/mitri.c 2005-07-03 09:02:08.000000000 +0200
+++ new/xorg-server-1.1.99.1/render/mitri.c 2006-05-10 10:03:59.000000000 +0200
@@ -145,7 +145,7 @@
if (npoint < 3)
return;
ntri = npoint - 2;
- tris = ALLOCATE_LOCAL (ntri & sizeof (xTriangle));
+ tris = ALLOCATE_LOCAL (ntri * sizeof (xTriangle));
if (!tris)
return;
for (tri = tris; npoint >= 3; npoint--, points++, tri++)
@@ -177,7 +177,7 @@
if (npoint < 3)
return;
ntri = npoint - 2;
- tris = ALLOCATE_LOCAL (ntri & sizeof (xTriangle));
+ tris = ALLOCATE_LOCAL (ntri * sizeof (xTriangle));
if (!tris)
return;
first = points++;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xorg-server-1.1.99.1/render/render.c new/xorg-server-1.1.99.1/render/render.c
--- old/xorg-server-1.1.99.1/render/render.c 2006-03-31 04:41:20.000000000 +0200
+++ new/xorg-server-1.1.99.1/render/render.c 2006-05-10 11:46:10.000000000 +0200
@@ -1,4 +1,4 @@
-/* $XdotOrg: xserver/xorg/render/render.c,v 1.12.8.3 2006/03/31 02:41:20 davidr Exp $ */
+/* $XdotOrg: xserver/xorg/render/render.c,v 1.12.8.4 2006/05/10 09:46:10 davidr Exp $ */
/*
* $XFree86: xc/programs/Xserver/render/render.c,v 1.27tsi Exp $
*
@@ -758,7 +758,7 @@
VERIFY_ALPHA (pMask, stuff->mask, client, SecurityReadAccess,
RenderErrBase + BadPicture);
if (pSrc->pDrawable && ((pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen) ||
- (pMask && pMask->pDrawable && pSrc->pDrawable->pScreen != pMask->pDrawable->pScreen)))
+ (pMask && pMask->pDrawable && pDst->pDrawable->pScreen != pMask->pDrawable->pScreen)))
return BadMatch;
CompositePicture (stuff->op,
pSrc,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...