summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2011-10-08 00:27:16 +0200
committerMarek Olšák <[email protected]>2011-10-08 18:54:28 +0200
commit39d7de69b1e3317ba813b4475f2b6132d70f8eef (patch)
treef5437164d5079239074cb1f805abfefcc9b624a2
parenta66a2359d72ceb67781c7e366f34265c7aaae91a (diff)
pb_bufmgr_cache: flush cache when create_buffer fails and try again
NOTE: This is a candidate for the stable branches.
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
index 58721c068e2..0e6896afd0a 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
@@ -324,6 +324,13 @@ pb_cache_manager_create_buffer(struct pb_manager *_mgr,
return NULL;
buf->buffer = mgr->provider->create_buffer(mgr->provider, size, desc);
+
+ /* Empty the cache and try again. */
+ if (!buf->buffer) {
+ mgr->base.flush(&mgr->base);
+ buf->buffer = mgr->provider->create_buffer(mgr->provider, size, desc);
+ }
+
if(!buf->buffer) {
FREE(buf);
return NULL;