[Mesa-dev] [PATCH 15/19] pipebuffer, winsys: Add a size match parameter to the cached buffer manager

Marek Olšák maraeo at gmail.com
Thu Feb 13 18:11:27 PST 2014


Please, can the size factor be a float?

Thanks,

Marek

On Fri, Feb 14, 2014 at 2:21 AM, Brian Paul <brianp at vmware.com> wrote:
> From: Thomas Hellstrom <thellstrom at vmware.com>
>
> In some situations it's important to restrict the sizes of buffers that the
> cached buffer manager is allowed to return
>
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
> Cc: "10.1" <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/auxiliary/pipebuffer/pb_bufmgr.h       |    3 ++-
>  src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c |    7 +++++--
>  src/gallium/winsys/radeon/drm/radeon_drm_winsys.c  |    2 +-
>  3 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr.h b/src/gallium/auxiliary/pipebuffer/pb_bufmgr.h
> index 2c88cf4..fe4c8c2 100644
> --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr.h
> +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr.h
> @@ -161,7 +161,8 @@ pb_slab_range_manager_create(struct pb_manager *provider,
>   */
>  struct pb_manager *
>  pb_cache_manager_create(struct pb_manager *provider,
> -                       unsigned usecs);
> +                       unsigned usecs,
> +                       unsigned size_factor);
>
>
>  struct pb_fence_ops;
> diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
> index 9728bf4..6de5de0 100644
> --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
> +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
> @@ -82,6 +82,7 @@ struct pb_cache_manager
>
>     struct list_head delayed;
>     pb_size numDelayed;
> +   unsigned size_factor;
>  };
>
>
> @@ -231,7 +232,7 @@ pb_cache_is_buffer_compat(struct pb_cache_buffer *buf,
>        return 0;
>
>     /* be lenient with size */
> -   if(buf->base.size >= 2*size)
> +   if(buf->base.size > buf->mgr->size_factor*size)
>        return 0;
>
>     if(!pb_check_alignment(desc->alignment, buf->base.alignment))
> @@ -387,7 +388,8 @@ pb_cache_manager_destroy(struct pb_manager *mgr)
>
>  struct pb_manager *
>  pb_cache_manager_create(struct pb_manager *provider,
> -                       unsigned usecs)
> +                       unsigned usecs,
> +                       unsigned size_factor)
>  {
>     struct pb_cache_manager *mgr;
>
> @@ -403,6 +405,7 @@ pb_cache_manager_create(struct pb_manager *provider,
>     mgr->base.flush = pb_cache_manager_flush;
>     mgr->provider = provider;
>     mgr->usecs = usecs;
> +   mgr->size_factor = size_factor;
>     LIST_INITHEAD(&mgr->delayed);
>     mgr->numDelayed = 0;
>     pipe_mutex_init(mgr->mutex);
> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
> index c28f3a7..b7137d2 100644
> --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
> @@ -645,7 +645,7 @@ PUBLIC struct radeon_winsys *radeon_drm_winsys_create(int fd)
>      ws->kman = radeon_bomgr_create(ws);
>      if (!ws->kman)
>          goto fail;
> -    ws->cman = pb_cache_manager_create(ws->kman, 1000000);
> +    ws->cman = pb_cache_manager_create(ws->kman, 1000000, 2);
>      if (!ws->cman)
>          goto fail;
>
> --
> 1.7.10.4
>
> _______________________________________________
> 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