summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/glx/xlib
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2010-09-08 00:30:27 +0800
committerChia-I Wu <[email protected]>2010-09-16 13:09:48 +0800
commit03224f492dc9cee179ff9ed961be0443a3669dd1 (patch)
tree23d9a37732677807c4722865c49a7990c3de1ba1 /src/gallium/state_trackers/glx/xlib
parent9ca59b2427837b8a70b580d66b4909e5f8443945 (diff)
st/xlib: Notify the context when the front/back buffers are swapped.
The current context should be notified when the the front/back buffers of the current drawable are swapped. The notification was skipped when xmesa_strict_invalidate is false (the default). This fixes fdo bug #29774.
Diffstat (limited to 'src/gallium/state_trackers/glx/xlib')
-rw-r--r--src/gallium/state_trackers/glx/xlib/xm_api.c18
-rw-r--r--src/gallium/state_trackers/glx/xlib/xm_api.h3
-rw-r--r--src/gallium/state_trackers/glx/xlib/xm_st.c4
3 files changed, 21 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
index 36d63c30d6c..f950c8858bc 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_api.c
+++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
@@ -1087,19 +1087,29 @@ XMesaDestroyBuffer(XMesaBuffer b)
/**
- * Query the current drawable size and notify the binding context.
+ * Notify the binding context to validate the buffer.
*/
void
-xmesa_check_buffer_size(XMesaBuffer b)
+xmesa_notify_invalid_buffer(XMesaBuffer b)
{
XMesaContext xmctx = XMesaGetCurrentContext();
+ if (xmctx && xmctx->xm_buffer == b)
+ xmctx->st->notify_invalid_framebuffer(xmctx->st, b->stfb);
+}
+
+
+/**
+ * Query the current drawable size and notify the binding context.
+ */
+void
+xmesa_check_buffer_size(XMesaBuffer b)
+{
if (b->type == PBUFFER)
return;
xmesa_get_window_size(b->xm_visual->display, b, &b->width, &b->height);
- if (xmctx && xmctx->xm_buffer == b)
- xmctx->st->notify_invalid_framebuffer(xmctx->st, b->stfb);
+ xmesa_notify_invalid_buffer(b);
}
diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.h b/src/gallium/state_trackers/glx/xlib/xm_api.h
index f209b14ea13..fedf2b2d5a1 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_api.h
+++ b/src/gallium/state_trackers/glx/xlib/xm_api.h
@@ -361,6 +361,9 @@ xmesa_get_window_size(Display *dpy, XMesaBuffer b,
GLuint *width, GLuint *height);
extern void
+xmesa_notify_invalid_buffer(XMesaBuffer b);
+
+extern void
xmesa_check_buffer_size(XMesaBuffer b);
extern void
diff --git a/src/gallium/state_trackers/glx/xlib/xm_st.c b/src/gallium/state_trackers/glx/xlib/xm_st.c
index 4c0ce07a6b5..4d0f5e66256 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_st.c
+++ b/src/gallium/state_trackers/glx/xlib/xm_st.c
@@ -339,6 +339,10 @@ xmesa_swap_st_framebuffer(struct st_framebuffer_iface *stfbi)
tmp = *front;
*front = *back;
*back = tmp;
+
+ /* the current context should validate the buffer after swapping */
+ if (!xmesa_strict_invalidate)
+ xmesa_notify_invalid_buffer(xstfb->buffer);
}
if (xmesa_strict_invalidate)