[Mesa-dev] [PATCH] gallium: Use base.stamp for all drawable invalidation checks.

Marek Olšák maraeo at gmail.com
Fri Nov 22 05:40:26 PST 2013


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Fri, Nov 22, 2013 at 5:20 AM, Keith Packard <keithp at keithp.com> wrote:
> Upper levels of the stack use base.stamp to tell when a drawable needs to be
> revalidated, but the dri state tracker was using dPriv->lastStamp. Those two,
> along with dri2.stamp, all get simultaneously incremented when a dri2
> invalidate event was delivered, and so end up containing precisely the same
> value.
>
> This patch doesn't change the fact that there are three variables, rather it
> switches all of the tests to use only base.stamp, which is functionally
> equivalent to the previous code.
>
> Then, it passes base.stamp to the image loader getBuffers function so that the
> one which is checked will get updated by the XCB special event queue used by DRI3.
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
> ---
>
> This patch makes sure that drawables get invalidated when the window
> changes size or when SwapBuffers is called; dri3 has only a single
> location to smite when things change, so we need to make sure the
> upper levels all share that location.
>
> This should permit the elimination of the dri2.stamp and lastStamp
> variables, which would be a nice further cleanup.
>
>  src/gallium/state_trackers/dri/common/dri_drawable.c | 4 ++--
>  src/gallium/state_trackers/dri/drm/dri2.c            | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/dri/common/dri_drawable.c b/src/gallium/state_trackers/dri/common/dri_drawable.c
> index f255108..734bca2 100644
> --- a/src/gallium/state_trackers/dri/common/dri_drawable.c
> +++ b/src/gallium/state_trackers/dri/common/dri_drawable.c
> @@ -73,7 +73,7 @@ dri_st_framebuffer_validate(struct st_context_iface *stctx,
>      * checked.
>      */
>     do {
> -      lastStamp = drawable->dPriv->lastStamp;
> +      lastStamp = drawable->base.stamp;
>        new_stamp = (drawable->texture_stamp != lastStamp);
>
>        if (new_stamp || new_mask || screen->broken_invalidate) {
> @@ -91,7 +91,7 @@ dri_st_framebuffer_validate(struct st_context_iface *stctx,
>           drawable->texture_stamp = lastStamp;
>           drawable->texture_mask = statt_mask;
>        }
> -   } while (lastStamp != drawable->dPriv->lastStamp);
> +   } while (lastStamp != drawable->base.stamp);
>
>     if (!out)
>        return TRUE;
> diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c
> index 6a56cd4..c7e4151 100644
> --- a/src/gallium/state_trackers/dri/drm/dri2.c
> +++ b/src/gallium/state_trackers/dri/drm/dri2.c
> @@ -545,7 +545,7 @@ dri_image_allocate_textures(struct dri_context *ctx,
>
>     (*sPriv->image.loader->getBuffers) (dPriv,
>                                         image_format,
> -                                       &dPriv->dri2.stamp,
> +                                       (uint32_t *) &drawable->base.stamp,
>                                         dPriv->loaderPrivate,
>                                         buffer_mask,
>                                         &images);
> --
> 1.8.4.2
>
> _______________________________________________
> 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