aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2017-04-12 17:05:56 +0200
committerNicolai Hähnle <[email protected]>2017-04-14 23:23:04 +0200
commit39f51b5db9404b166fa7c1845a348f427c03a8f1 (patch)
treeb12c621046834c1026313cdc487ad14fe6ec1f55
parentc1dd5d0b01e7d4a74b408ad834f84d1914779a44 (diff)
radeonsi: add missing initialization for userptr buffers
Fix the accounting for memory usage of userptr buffers, which has been wrong forever (or at least for a long time). Also initialize flags. Without this initialization, the sparse buffer flag might end up being set, which leads to staging buffers being used unnecessarily (and incorrectly) in transfers to or from userptr buffers. This works around VM faults that occur with the radeon kernel module when running piglit ./bin/amd_pinned_memory decrement-offset map-buffer -auto Fixes: e077c5fe6579 ("gallium/radeon: transfers and invalidation for sparse buffers") Reported-by: Michel Dänzer <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
-rw-r--r--src/gallium/drivers/radeon/r600_buffer_common.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
index 0e93404c018..b2289e26f72 100644
--- a/src/gallium/drivers/radeon/r600_buffer_common.c
+++ b/src/gallium/drivers/radeon/r600_buffer_common.c
@@ -612,6 +612,7 @@ r600_buffer_from_user_memory(struct pipe_screen *screen,
struct r600_resource *rbuffer = r600_alloc_buffer_struct(screen, templ);
rbuffer->domains = RADEON_DOMAIN_GTT;
+ rbuffer->flags = 0;
util_range_add(&rbuffer->valid_buffer_range, 0, templ->width0);
/* Convert a user pointer to a buffer. */
@@ -627,5 +628,8 @@ r600_buffer_from_user_memory(struct pipe_screen *screen,
else
rbuffer->gpu_address = 0;
+ rbuffer->vram_usage = 0;
+ rbuffer->gart_usage = templ->width0;
+
return &rbuffer->b.b;
}