diff options
author | Nicolai Hähnle <[email protected]> | 2016-09-30 11:26:13 +0200 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2016-09-30 12:38:29 +0200 |
commit | 13cb41f666212ed50a7939a37a373b4431a84033 (patch) | |
tree | 8a59e2f857e93715a5273dae4d263406ff145157 /src/gallium/drivers/radeon | |
parent | 1d466b9b04662d41a403ea8fd617a5365750b1de (diff) |
radeon/video: don't use sub-allocated buffers
Cc: Christian König <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97976
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97969
Reviewed-by: Christian König <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon')
-rw-r--r-- | src/gallium/drivers/radeon/r600_buffer_common.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_video.c | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c index cbbcc293e12..784522dd456 100644 --- a/src/gallium/drivers/radeon/r600_buffer_common.c +++ b/src/gallium/drivers/radeon/r600_buffer_common.c @@ -531,6 +531,9 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen *screen, r600_init_resource_fields(rscreen, rbuffer, templ->width0, alignment); + if (templ->bind & PIPE_BIND_SHARED) + rbuffer->flags |= RADEON_FLAG_HANDLE; + if (!r600_alloc_resource(rscreen, rbuffer)) { FREE(rbuffer); return NULL; diff --git a/src/gallium/drivers/radeon/radeon_video.c b/src/gallium/drivers/radeon/radeon_video.c index d7c5a165ef3..de8e11cd8e2 100644 --- a/src/gallium/drivers/radeon/radeon_video.c +++ b/src/gallium/drivers/radeon/radeon_video.c @@ -66,8 +66,14 @@ bool rvid_create_buffer(struct pipe_screen *screen, struct rvid_buffer *buffer, { memset(buffer, 0, sizeof(*buffer)); buffer->usage = usage; + + /* Hardware buffer placement restrictions require the kernel to be + * able to move buffers around individually, so request a + * non-sub-allocated buffer. + */ buffer->res = (struct r600_resource *) - pipe_buffer_create(screen, PIPE_BIND_CUSTOM, usage, size); + pipe_buffer_create(screen, PIPE_BIND_CUSTOM | PIPE_BIND_SHARED, + usage, size); return buffer->res != NULL; } |