From 84f7ded9253c8ac23cff42d14ac44184277a54e8 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Fri, 24 Feb 2006 16:50:22 +0000 Subject: [PATCH] add bmBufferGetSubData --- src/mesa/drivers/dri/i915/bufmgr.h | 6 +++++ src/mesa/drivers/dri/i915/bufmgr_fake.c | 34 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/mesa/drivers/dri/i915/bufmgr.h b/src/mesa/drivers/dri/i915/bufmgr.h index 608193d2f35..471729bb2b4 100644 --- a/src/mesa/drivers/dri/i915/bufmgr.h +++ b/src/mesa/drivers/dri/i915/bufmgr.h @@ -115,6 +115,12 @@ void bmBufferSubData(struct bufmgr *, unsigned size, const void *data ); +void bmBufferGetSubData(struct bufmgr *, + unsigned buffer, + unsigned offset, + unsigned size, + void *data ); + void *bmMapBuffer( struct bufmgr *, unsigned buffer, unsigned access ); diff --git a/src/mesa/drivers/dri/i915/bufmgr_fake.c b/src/mesa/drivers/dri/i915/bufmgr_fake.c index 1287ba92b2c..dfab97f1ac8 100644 --- a/src/mesa/drivers/dri/i915/bufmgr_fake.c +++ b/src/mesa/drivers/dri/i915/bufmgr_fake.c @@ -808,6 +808,40 @@ void bmBufferSubData(struct bufmgr *bm, } + +/* Extract data from the buffer: + */ +void bmBufferGetSubData(struct bufmgr *bm, + unsigned buffer, + unsigned offset, + unsigned size, + void *data ) +{ + struct buffer *buf = (struct buffer *)_mesa_HashLookup( bm->hash, buffer ); + + DBG("bmBufferSubdata %d offset 0x%x sz 0x%x\n", buffer, offset, size); + + if (buf->block == 0) + return; + + if (buf->block->mem_type != BM_MEM_LOCAL) + bmFinishFence(bm, buf->block->fence); + + if (size) { +#if 0 + memcpy(data, buf->block->virtual + offset, size); +#else + /* Do an implicit map/unmap to get this working for now: + */ + memcpy(data, bmMapBuffer(bm, buf->id, 0) + offset, size); + bmUnmapBuffer(bm, buf->id); +#endif + } +} + + + + /* Return a pointer to whatever space the buffer is currently resident in: */ void *bmMapBuffer( struct bufmgr *bm,