summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr.h3
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c7
-rw-r--r--src/gallium/winsys/radeon/drm/radeon_drm_winsys.c2
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;