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