Commit 2d606c13 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

nouveau: allow multiple simultaneous maps of a pipe_transfer

I'm not entirely convinced we want this behaviour (the underlying nouveau_bo
doesn't support it either), but since certain parts of the mesa state
tracker appear to require it lets make it work for now.
parent 841b327a
......@@ -9,6 +9,7 @@
struct nv50_transfer {
struct pipe_transfer base;
struct nouveau_bo *bo;
int map_refcnt;
unsigned level_offset;
unsigned level_tiling;
int level_pitch;
......@@ -225,14 +226,19 @@ nv50_transfer_map(struct pipe_context *pcontext, struct pipe_transfer *ptx)
unsigned flags = 0;
int ret;
if (tx->map_refcnt++)
return tx->bo->map;
if (ptx->usage & PIPE_TRANSFER_WRITE)
flags |= NOUVEAU_BO_WR;
if (ptx->usage & PIPE_TRANSFER_READ)
flags |= NOUVEAU_BO_RD;
ret = nouveau_bo_map(tx->bo, flags);
if (ret)
if (ret) {
tx->map_refcnt = 0;
return NULL;
}
return tx->bo->map;
}
......@@ -241,6 +247,8 @@ nv50_transfer_unmap(struct pipe_context *pcontext, struct pipe_transfer *ptx)
{
struct nv50_transfer *tx = (struct nv50_transfer *)ptx;
if (--tx->map_refcnt)
return;
nouveau_bo_unmap(tx->bo);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment