[Mesa-dev] [PATCH] st/glx: Fix endless loop in drawable validation
Jose Fonseca
jfonseca at vmware.com
Tue Jul 5 05:17:19 PDT 2011
I didn't reproduce this issue here yet, but this looks like a sensible thing to do regardless -- we should never invalidate anything if the size does not change.
Jose
----- Original Message -----
> This fixes a regression introduced with commit
>
> "st-api: Rework how drawables are invalidated v3"
>
> where the glx state tracker manager would invalidate a drawable each
> time it
> checks the drawable dimensions, even during a validate call, which
> resulted in an endless loop, since the state tracker would
> immediately
> detect the new invalidation and rerun the validate...
>
> This change marks the drawable invalid only if the drawable
> dimensions actually
> changed during the validate, which will result in at most a single
> unnecessary validate by the context running a validate during which
> the
> dimensions changed.
>
> To avoid unnecessary validates altogether, we need to implement yet
> another
> st-api change: Returning the current time stamp from the validate
> function,
> as suggested by Chia-I Wu. The glx state tracker manager could then
> return
> the stamp resulting from the last drawable dimension check.
>
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
> ---
> src/gallium/state_trackers/glx/xlib/xm_api.c | 9 ++++++++-
> 1 files changed, 8 insertions(+), 1 deletions(-)
>
> diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c
> b/src/gallium/state_trackers/glx/xlib/xm_api.c
> index 1be6dd9..8f6406d 100644
> --- a/src/gallium/state_trackers/glx/xlib/xm_api.c
> +++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
> @@ -1124,11 +1124,18 @@ xmesa_notify_invalid_buffer(XMesaBuffer b)
> void
> xmesa_check_buffer_size(XMesaBuffer b)
> {
> + GLuint old_width, old_height;
> +
> if (b->type == PBUFFER)
> return;
>
> + old_width = b->width;
> + old_height = b->height;
> +
> xmesa_get_window_size(b->xm_visual->display, b, &b->width,
> &b->height);
> - xmesa_notify_invalid_buffer(b);
> +
> + if (b->width != old_width || b->height != old_height)
> + xmesa_notify_invalid_buffer(b);
> }
>
>
> --
> 1.6.2.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list