Mesa (master): pipebuffer: slab: if size < alignment, use alignment to find bucket

Jose Fonseca jrfonseca at kemper.freedesktop.org
Tue Feb 23 19:50:31 UTC 2010


Module: Mesa
Branch: master
Commit: 2f5beb4b530d47d6b4a7cf0effeaec0d2c1b6ea4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2f5beb4b530d47d6b4a7cf0effeaec0d2c1b6ea4

Author: Luca Barbieri <luca at luca-barbieri.com>
Date:   Tue Feb 23 08:55:24 2010 -0800

pipebuffer: slab: if size < alignment, use alignment to find bucket

If the size is lower than the alignment, we must use the alignment to
select the bucket.

Otherwise, the selected bucket won't be able to satisfy our request
and will fail.

Signed-off-by: José Fonseca <jfonseca at vmware.com>

---

 src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
index c445cb5..24e2820 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
@@ -483,11 +483,15 @@ pb_slab_range_manager_create_buffer(struct pb_manager *_mgr,
 {
    struct pb_slab_range_manager *mgr = pb_slab_range_manager(_mgr);
    pb_size bufSize;
+   pb_size reqSize = size;
    unsigned i;
 
+   if(desc->alignment > reqSize)
+	   reqSize = desc->alignment;
+
    bufSize = mgr->minBufSize;
    for (i = 0; i < mgr->numBuckets; ++i) {
-      if(bufSize >= size)
+      if(bufSize >= reqSize)
 	 return mgr->buckets[i]->create_buffer(mgr->buckets[i], size, desc);
       bufSize *= 2;
    }




More information about the mesa-commit mailing list