diff options
author | Thomas Hellstrom <[email protected]> | 2014-02-08 09:51:15 -0800 |
---|---|---|
committer | Brian Paul <[email protected]> | 2014-02-14 08:21:44 -0700 |
commit | c9e9b1862b472b2671b8d3b339f9f7624a272073 (patch) | |
tree | 65ac8d5a5eaee5e375db66cb584b2fab8df4cb0b /src/gallium | |
parent | 3d1fd6df5315cfa4b9c8b1332f5078a89abc3ed8 (diff) |
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 <[email protected]>
Cc: "10.1" <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/auxiliary/pipebuffer/pb_bufmgr.h | 3 | ||||
-rw-r--r-- | src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c | 7 | ||||
-rw-r--r-- | 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 2c88cf435c7..fe4c8c20071 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 9728bf4ee8b..6de5de04fe9 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 c28f3a7b89e..b7137d221ca 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; |