diff options
author | Ben Skeggs <[email protected]> | 2007-12-27 06:10:49 +1100 |
---|---|---|
committer | Ben Skeggs <[email protected]> | 2007-12-27 06:10:49 +1100 |
commit | 3b8efe1dfedec0b6598dc9cc3d6897fe2b3b788d (patch) | |
tree | 971d2d50eaabe45c7910fb7e2e6e067f5f1351ad /src/mesa/drivers | |
parent | a794fcfbdbc0417ed9960bd92e0ac49367660635 (diff) |
nouveau: allow unfenced read of buffers in a few situations
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/nouveau_winsys/nouveau_bo.c | 8 | ||||
-rw-r--r-- | src/mesa/drivers/dri/nouveau_winsys/nouveau_drmif.h | 1 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/nouveau_winsys/nouveau_bo.c b/src/mesa/drivers/dri/nouveau_winsys/nouveau_bo.c index ca1e89e959d..08d38c58af3 100644 --- a/src/mesa/drivers/dri/nouveau_winsys/nouveau_bo.c +++ b/src/mesa/drivers/dri/nouveau_winsys/nouveau_bo.c @@ -299,8 +299,10 @@ nouveau_bo_map(struct nouveau_bo *bo, uint32_t flags) if (!nvbo) return -EINVAL; - if (nvbo->fence) + if (flags & NOUVEAU_BO_WR) nouveau_fence_wait(&nvbo->fence); + else + nouveau_fence_wait(&nvbo->wr_fence); if (nvbo->sysmem) bo->map = nvbo->sysmem; @@ -385,6 +387,8 @@ nouveau_bo_validate(struct nouveau_channel *chan, struct nouveau_bo *bo, struct nouveau_bo_priv *nvbo = nouveau_bo(bo); int ret; + assert(bo->map == NULL); + if (nvbo->user) { ret = nouveau_bo_validate_user(chan, bo, fence, flags); if (ret) { @@ -398,6 +402,8 @@ nouveau_bo_validate(struct nouveau_channel *chan, struct nouveau_bo *bo, return ret; } + if (flags & NOUVEAU_BO_WR) + nouveau_fence_ref(fence, &nvbo->wr_fence); nouveau_fence_ref(fence, &nvbo->fence); return 0; } diff --git a/src/mesa/drivers/dri/nouveau_winsys/nouveau_drmif.h b/src/mesa/drivers/dri/nouveau_winsys/nouveau_drmif.h index 1ce7174e758..4b42baf809a 100644 --- a/src/mesa/drivers/dri/nouveau_winsys/nouveau_drmif.h +++ b/src/mesa/drivers/dri/nouveau_winsys/nouveau_drmif.h @@ -242,6 +242,7 @@ struct nouveau_bo_priv { struct nouveau_bo base; struct nouveau_fence *fence; + struct nouveau_fence *wr_fence; struct drm_nouveau_mem_alloc drm; void *map; |