diff options
author | Christoph Bumiller <[email protected]> | 2011-02-15 19:12:41 +0100 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2011-02-16 15:45:30 +0100 |
commit | a3c62afa7c7f3435b3c28bee417e652c9bb018e6 (patch) | |
tree | 6d80acc6b97000f10088d54e2e809efd5f77a12b /src/gallium/drivers/nvc0/nvc0_buffer.c | |
parent | fc5ab1b19780ef97c5e7f6257a2d91121503bd53 (diff) |
nvc0: fix user vertex buffer updates
Diffstat (limited to 'src/gallium/drivers/nvc0/nvc0_buffer.c')
-rw-r--r-- | src/gallium/drivers/nvc0/nvc0_buffer.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/gallium/drivers/nvc0/nvc0_buffer.c b/src/gallium/drivers/nvc0/nvc0_buffer.c index ea3e642a448..f16671ac7ff 100644 --- a/src/gallium/drivers/nvc0/nvc0_buffer.c +++ b/src/gallium/drivers/nvc0/nvc0_buffer.c @@ -59,15 +59,23 @@ release_allocation(struct nvc0_mm_allocation **mm, struct nvc0_fence *fence) (*mm) = NULL; } -static INLINE boolean -nvc0_buffer_reallocate(struct nvc0_screen *screen, struct nvc0_resource *buf, - unsigned domain) +INLINE void +nvc0_buffer_release_gpu_storage(struct nvc0_resource *buf) { nouveau_bo_ref(NULL, &buf->bo); if (buf->mm) release_allocation(&buf->mm, buf->fence); + buf->domain = 0; +} + +static INLINE boolean +nvc0_buffer_reallocate(struct nvc0_screen *screen, struct nvc0_resource *buf, + unsigned domain) +{ + nvc0_buffer_release_gpu_storage(buf); + return nvc0_buffer_allocate(screen, buf, domain); } @@ -77,10 +85,7 @@ nvc0_buffer_destroy(struct pipe_screen *pscreen, { struct nvc0_resource *res = nvc0_resource(presource); - nouveau_bo_ref(NULL, &res->bo); - - if (res->mm) - release_allocation(&res->mm, res->fence); + nvc0_buffer_release_gpu_storage(res); if (res->data && !(res->status & NVC0_BUFFER_STATUS_USER_MEMORY)) FREE(res->data); |