xserver: Branch 'master' - 2 commits
Michel Daenzer
daenzer at kemper.freedesktop.org
Thu Feb 14 16:04:37 PST 2008
GL/glx/glxdri.c | 81 +++++++++++++++++++++++++++++++-------------------------
1 file changed, 46 insertions(+), 35 deletions(-)
New commits:
commit 005e31d3de04e7003f84a94d30f2b75a9636266e
Author: Michel Dänzer <michel at tungstengraphics.com>
Date: Fri Feb 15 00:01:32 2008 +0000
AIGLX: Refactor code common between __glXDRI{drawableDestroy,releaseTexImage}.
diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c
index e405ee0..304fed2 100644
--- a/GL/glx/glxdri.c
+++ b/GL/glx/glxdri.c
@@ -180,46 +180,53 @@ __glXDRIenterServer(GLboolean rendering)
DRIWakeupHandler(NULL, 0, NULL);
}
+
static void
-__glXDRIdrawableDestroy(__GLXdrawable *drawable)
+__glXDRIdoReleaseTexImage(__GLXDRIscreen *screen, __GLXDRIdrawable *drawable)
{
- __GLXDRIdrawable *private = (__GLXDRIdrawable *) drawable;
+ GLuint lastOverride = screen->lastTexOffsetOverride;
- int i;
+ if (lastOverride) {
+ __GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
+ int i;
- for (i = 0; i < screenInfo.numScreens; i++) {
- __GLXDRIscreen * const screen = (__GLXDRIscreen *)
- glxGetScreen(screenInfo.screens[i]);
+ for (i = 0; i < lastOverride; i++) {
+ if (texOffsetOverride[i] == drawable) {
- GLuint lastOverride = screen->lastTexOffsetOverride;
+ texOffsetOverride[i] = NULL;
- if (lastOverride) {
- __GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
- int i;
-
- for (i = 0; i < lastOverride; i++) {
- if (texOffsetOverride[i] == private) {
-
- texOffsetOverride[i] = NULL;
-
- if (i + 1 == lastOverride) {
- lastOverride = 0;
-
- while (i--) {
- if (texOffsetOverride[i]) {
- lastOverride = i + 1;
- break;
- }
+ if (i + 1 == lastOverride) {
+ lastOverride = 0;
+
+ while (i--) {
+ if (texOffsetOverride[i]) {
+ lastOverride = i + 1;
+ break;
}
-
- screen->lastTexOffsetOverride = lastOverride;
-
- break;
}
+
+ screen->lastTexOffsetOverride = lastOverride;
+
+ break;
}
}
}
}
+}
+
+
+static void
+__glXDRIdrawableDestroy(__GLXdrawable *drawable)
+{
+ __GLXDRIdrawable *private = (__GLXDRIdrawable *) drawable;
+
+ int i;
+
+ for (i = 0; i < screenInfo.numScreens; i++) {
+ __glXDRIdoReleaseTexImage((__GLXDRIscreen *)
+ glxGetScreen(screenInfo.screens[i]),
+ private);
+ }
(*private->driDrawable.destroyDrawable)(&private->driDrawable);
@@ -561,41 +568,9 @@ __glXDRIreleaseTexImage(__GLXcontext *baseContext,
int buffer,
__GLXdrawable *pixmap)
{
- ScreenPtr pScreen = pixmap->pDraw->pScreen;
- __GLXDRIdrawable *driDraw =
- containerOf(pixmap, __GLXDRIdrawable, base);
- __GLXDRIscreen * const screen =
- (__GLXDRIscreen *) glxGetScreen(pScreen);
- GLuint lastOverride = screen->lastTexOffsetOverride;
-
- if (lastOverride) {
- __GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
- int i;
-
- for (i = 0; i < lastOverride; i++) {
- if (texOffsetOverride[i] == driDraw) {
- if (screen->texOffsetFinish)
- screen->texOffsetFinish((PixmapPtr)pixmap->pDraw);
-
- texOffsetOverride[i] = NULL;
-
- if (i + 1 == lastOverride) {
- lastOverride = 0;
-
- while (i--) {
- if (texOffsetOverride[i]) {
- lastOverride = i + 1;
- break;
- }
- }
-
- screen->lastTexOffsetOverride = lastOverride;
-
- break;
- }
- }
- }
- }
+ __glXDRIdoReleaseTexImage((__GLXDRIscreen *)
+ glxGetScreen(pixmap->pDraw->pScreen),
+ containerOf(pixmap, __GLXDRIdrawable, base));
return Success;
}
commit cd78f0d0fc08e4e2339ed09dad1a12802de7729c
Author: Pierre Willenbrock <pierre at pirsoft.de>
Date: Thu Feb 7 21:28:28 2008 +0100
AIGLX: Fix crash after client using GLX_EXT_texture_from_pixmap died.
diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c
index 6c1a199..e405ee0 100644
--- a/GL/glx/glxdri.c
+++ b/GL/glx/glxdri.c
@@ -185,6 +185,42 @@ __glXDRIdrawableDestroy(__GLXdrawable *drawable)
{
__GLXDRIdrawable *private = (__GLXDRIdrawable *) drawable;
+ int i;
+
+ for (i = 0; i < screenInfo.numScreens; i++) {
+ __GLXDRIscreen * const screen = (__GLXDRIscreen *)
+ glxGetScreen(screenInfo.screens[i]);
+
+ GLuint lastOverride = screen->lastTexOffsetOverride;
+
+ if (lastOverride) {
+ __GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
+ int i;
+
+ for (i = 0; i < lastOverride; i++) {
+ if (texOffsetOverride[i] == private) {
+
+ texOffsetOverride[i] = NULL;
+
+ if (i + 1 == lastOverride) {
+ lastOverride = 0;
+
+ while (i--) {
+ if (texOffsetOverride[i]) {
+ lastOverride = i + 1;
+ break;
+ }
+ }
+
+ screen->lastTexOffsetOverride = lastOverride;
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
(*private->driDrawable.destroyDrawable)(&private->driDrawable);
/* If the X window was destroyed, the dri DestroyWindow hook will
More information about the xorg-commit
mailing list