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/nvc0 | |
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/nvc0')
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/nvc0_resource.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/nvc0_state.c | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c b/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c index 4e70903b538..12b5a025064 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c @@ -36,6 +36,8 @@ nvc0_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 nvc0_miptree_surface_new(pipe, pres, templ); diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c index 0213a8e22ac..dec535532d8 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c @@ -992,6 +992,7 @@ nvc0_so_target_create(struct pipe_context *pipe, struct pipe_resource *res, unsigned offset, unsigned size) { + struct nv04_resource *buf = (struct nv04_resource *)res; struct nvc0_so_target *targ = MALLOC_STRUCT(nvc0_so_target); if (!targ) return NULL; @@ -1010,6 +1011,9 @@ nvc0_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; } |