Mesa (master): r300: Don' t always round-trip to the X server for glXBindTexImageEXT.

Michel Dänzer daenzer at kemper.freedesktop.org
Sun Aug 30 10:54:31 UTC 2009


Module: Mesa
Branch: master
Commit: a9b217b742c79f84f41b098799894b2067d4af84
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a9b217b742c79f84f41b098799894b2067d4af84

Author: Michel Dänzer <daenzer at vmware.com>
Date:   Sun Aug 30 12:37:13 2009 +0200

r300: Don't always round-trip to the X server for glXBindTexImageEXT.

The buffer for a pixmap should never change.

---

 src/mesa/drivers/dri/r300/r300_texstate.c |   25 ++++++++++++++-----------
 1 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_texstate.c b/src/mesa/drivers/dri/r300/r300_texstate.c
index f030451..e6c489c 100644
--- a/src/mesa/drivers/dri/r300/r300_texstate.c
+++ b/src/mesa/drivers/dri/r300/r300_texstate.c
@@ -407,18 +407,21 @@ void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
     	    return;
     	}
 
-	radeon_update_renderbuffers(pDRICtx, dPriv);
-	/* back & depth buffer are useless free them right away */
-	rb = (void*)rfb->base.Attachment[BUFFER_DEPTH].Renderbuffer;
-	if (rb && rb->bo) {
-		radeon_bo_unref(rb->bo);
-        rb->bo = NULL;
-	}
-	rb = (void*)rfb->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer;
-	if (rb && rb->bo) {
-		radeon_bo_unref(rb->bo);
-		rb->bo = NULL;
+	if (!rfb->color_rb[0] || !rfb->color_rb[0]->bo) {
+		radeon_update_renderbuffers(pDRICtx, dPriv);
+		/* back & depth buffer are useless free them right away */
+		rb = (void*)rfb->base.Attachment[BUFFER_DEPTH].Renderbuffer;
+		if (rb && rb->bo) {
+			radeon_bo_unref(rb->bo);
+			rb->bo = NULL;
+		}
+		rb = (void*)rfb->base.Attachment[BUFFER_BACK_LEFT].Renderbuffer;
+		if (rb && rb->bo) {
+			radeon_bo_unref(rb->bo);
+			rb->bo = NULL;
+		}
 	}
+
 	rb = rfb->color_rb[0];
 	if (rb->bo == NULL) {
 		/* Failed to BO for the buffer */




More information about the mesa-commit mailing list