diff options
author | Chia-I Wu <[email protected]> | 2010-09-08 00:30:27 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2010-09-16 13:09:48 +0800 |
commit | 03224f492dc9cee179ff9ed961be0443a3669dd1 (patch) | |
tree | 23d9a37732677807c4722865c49a7990c3de1ba1 /src/gallium/state_trackers/glx | |
parent | 9ca59b2427837b8a70b580d66b4909e5f8443945 (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')
-rw-r--r-- | src/gallium/state_trackers/glx/xlib/xm_api.c | 18 | ||||
-rw-r--r-- | src/gallium/state_trackers/glx/xlib/xm_api.h | 3 | ||||
-rw-r--r-- | src/gallium/state_trackers/glx/xlib/xm_st.c | 4 |
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) |