diff options
author | Eric Anholt <[email protected]> | 2008-02-13 09:26:06 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2008-02-13 10:34:48 -0800 |
commit | ee781a41af95a317f4f37182e0d614e917e0737d (patch) | |
tree | 9f9180dd5d67b7cf72b72cc9c2236639bdae2640 | |
parent | ee8dfa89646ea5aa5e5cf72e29b601cbe357e126 (diff) |
When mapping, wait on the buffer's fence, not hardware idle, in bufmgr_fake
-rw-r--r-- | src/mesa/drivers/dri/common/dri_bufmgr_fake.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/common/dri_bufmgr_fake.c b/src/mesa/drivers/dri/common/dri_bufmgr_fake.c index 30a4ecb3b75..7212ee84ab1 100644 --- a/src/mesa/drivers/dri/common/dri_bufmgr_fake.c +++ b/src/mesa/drivers/dri/common/dri_bufmgr_fake.c @@ -517,6 +517,21 @@ dri_bufmgr_fake_wait_idle(dri_bufmgr_fake *bufmgr_fake) _fence_wait_internal(bufmgr_fake, cookie); } +/** + * Wait for execution pending on a buffer + */ +static void +dri_bufmgr_fake_bo_wait_idle(dri_bo *bo) +{ + dri_bufmgr_fake *bufmgr_fake = (dri_bufmgr_fake *)bo->bufmgr; + dri_bo_fake *bo_fake = (dri_bo_fake *)bo; + + if (bo_fake->block == NULL || !bo_fake->block->fenced) + return; + + _fence_wait_internal(bufmgr_fake, bo_fake->block->fence); +} + /* Specifically ignore texture memory sharing. * -- just evict everything * -- and wait for idle @@ -720,8 +735,10 @@ dri_fake_bo_map(dri_bo *bo, GLboolean write_enable) assert(bo_fake->block); bo_fake->dirty = 0; - if (!(bo_fake->flags & BM_NO_FENCE_SUBDATA)) - dri_bufmgr_fake_wait_idle(bufmgr_fake); + if (!(bo_fake->flags & BM_NO_FENCE_SUBDATA) && + bo_fake->block->fenced) { + dri_bufmgr_fake_bo_wait_idle(bo); + } bo->virtual = bo_fake->block->virtual; } |