diff options
author | Ilia Mirkin <[email protected]> | 2014-02-27 01:07:51 -0500 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2014-03-09 01:31:21 -0500 |
commit | 5bf90cb521d1d6f26684b1ce9d0811c636b6abb1 (patch) | |
tree | 955939b89e5d36de43a6866bde400c595a6b5c23 /src/gallium/drivers/nouveau/nv50 | |
parent | cf1c52575d6fea966d818eac4a32ec2decc48576 (diff) |
nouveau: add valid range tracking to nouveau_buffer
This logic is borrowed from the radeon code. The transfer logic will
only get called for PIPE_BUFFER resources, so it shouldn't be necessary
to worry about them becoming render targets.
Signed-off-by: Ilia Mirkin <[email protected]>
Reviewed-by: Christoph Bumiller <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nouveau/nv50')
-rw-r--r-- | src/gallium/drivers/nouveau/nv50/nv50_resource.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nv50/nv50_state.c | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_resource.c b/src/gallium/drivers/nouveau/nv50/nv50_resource.c index 7fbb0a92bf6..d289b4a24e8 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_resource.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_resource.c @@ -68,6 +68,8 @@ nv50_surface_create(struct pipe_context *pipe, struct pipe_resource *pres, const struct pipe_surface *templ) { + /* surfaces are assumed to be miptrees all over the place. */ + assert(pres->target != PIPE_BUFFER); if (unlikely(pres->target == PIPE_BUFFER)) return nv50_surface_from_buffer(pipe, pres, templ); return nv50_miptree_surface_new(pipe, pres, templ); diff --git a/src/gallium/drivers/nouveau/nv50/nv50_state.c b/src/gallium/drivers/nouveau/nv50/nv50_state.c index 288ba462195..c03d72922a9 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_state.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_state.c @@ -1010,6 +1010,7 @@ nv50_so_target_create(struct pipe_context *pipe, struct pipe_resource *res, unsigned offset, unsigned size) { + struct nv04_resource *buf = (struct nv04_resource *)res; struct nv50_so_target *targ = MALLOC_STRUCT(nv50_so_target); if (!targ) return NULL; @@ -1033,6 +1034,9 @@ nv50_so_target_create(struct pipe_context *pipe, pipe_resource_reference(&targ->pipe.buffer, res); pipe_reference_init(&targ->pipe.reference, 1); + assert(buf->base.target == PIPE_BUFFER); + util_range_add(&buf->valid_buffer_range, offset, offset + size); + return &targ->pipe; } |