aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/bufmgr_fake.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/i965/bufmgr_fake.c')
-rw-r--r--src/mesa/drivers/dri/i965/bufmgr_fake.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i965/bufmgr_fake.c b/src/mesa/drivers/dri/i965/bufmgr_fake.c
index b9f1553c74d..1cb3f67b349 100644
--- a/src/mesa/drivers/dri/i965/bufmgr_fake.c
+++ b/src/mesa/drivers/dri/i965/bufmgr_fake.c
@@ -163,10 +163,16 @@ static GLboolean alloc_from_pool( struct intel_context *intel,
struct bufmgr *bm = intel->bm;
struct pool *pool = &bm->pool[pool_nr];
struct block *block = (struct block *)calloc(sizeof *block, 1);
+ GLuint sz, align = (1<<buf->alignment);
+
if (!block)
return GL_FALSE;
- block->mem = mmAllocMem(pool->heap, buf->size, buf->alignment, 0);
+ sz = (buf->size + align-1) & ~(align-1);
+
+ block->mem = mmAllocMem(pool->heap,
+ sz,
+ buf->alignment, 0);
if (!block->mem) {
free(block);
return GL_FALSE;
@@ -621,14 +627,14 @@ int bmInitPool( struct intel_context *intel,
return retval;
}
-static struct buffer *do_GenBuffer(struct intel_context *intel, const char *name)
+static struct buffer *do_GenBuffer(struct intel_context *intel, const char *name, int align)
{
struct bufmgr *bm = intel->bm;
struct buffer *buf = calloc(sizeof(*buf), 1);
buf->id = ++bm->buf_nr;
buf->name = name;
- buf->alignment = 12; /* page-alignment to fit in with AGP swapping */
+ buf->alignment = align ? align : 6;
buf->flags = BM_MEM_AGP|BM_MEM_VRAM|BM_MEM_LOCAL;
return buf;
@@ -638,7 +644,8 @@ static struct buffer *do_GenBuffer(struct intel_context *intel, const char *name
void bmGenBuffers(struct intel_context *intel,
const char *name, unsigned n,
- struct buffer **buffers)
+ struct buffer **buffers,
+ int align )
{
struct bufmgr *bm = intel->bm;
LOCK(bm);
@@ -646,7 +653,7 @@ void bmGenBuffers(struct intel_context *intel,
int i;
for (i = 0; i < n; i++)
- buffers[i] = do_GenBuffer(intel, name);
+ buffers[i] = do_GenBuffer(intel, name, align);
}
UNLOCK(bm);
}
@@ -694,7 +701,7 @@ struct buffer *bmGenBufferStatic(struct intel_context *intel,
if (bm->pool[pool].static_buffer)
buf = bm->pool[pool].static_buffer;
else {
- buf = do_GenBuffer(intel, "static");
+ buf = do_GenBuffer(intel, "static", 12);
bm->pool[pool].static_buffer = buf;
assert(!buf->block);