summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/pipebuffer
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2014-02-08 09:51:15 -0800
committerBrian Paul <brianp@vmware.com>2014-02-14 08:21:44 -0700
commitc9e9b1862b472b2671b8d3b339f9f7624a272073 (patch)
tree65ac8d5a5eaee5e375db66cb584b2fab8df4cb0b /src/gallium/auxiliary/pipebuffer
parent3d1fd6df5315cfa4b9c8b1332f5078a89abc3ed8 (diff)
downloadexternal_mesa3d-c9e9b1862b472b2671b8d3b339f9f7624a272073.zip
external_mesa3d-c9e9b1862b472b2671b8d3b339f9f7624a272073.tar.gz
external_mesa3d-c9e9b1862b472b2671b8d3b339f9f7624a272073.tar.bz2
pipebuffer, winsys: Add a size match parameter to the cached buffer manager
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@vmware.com> Cc: "10.1" <mesa-stable@lists.freedesktop.org>
Diffstat (limited to 'src/gallium/auxiliary/pipebuffer')
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr.h3
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c7
2 files changed, 7 insertions, 3 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);