[Mesa-dev] [PATCH v2 1/5] radeon/video: don't use sub-allocated buffers

Christian König deathsimple at vodafone.de
Fri Sep 30 10:22:11 UTC 2016


Patches #1-#3 of this series are Reviewed-by: Christian König 
<christian.koenig at amd.com>.

Regards,
Christian.

Am 30.09.2016 um 11:52 schrieb Nicolai Hähnle:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Cc: Christian König <christian.koenig at amd.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97976
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97969
> ---
>   src/gallium/drivers/radeon/r600_buffer_common.c | 3 +++
>   src/gallium/drivers/radeon/radeon_video.c       | 8 +++++++-
>   2 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
> index 9414920..4e1af92 100644
> --- a/src/gallium/drivers/radeon/r600_buffer_common.c
> +++ b/src/gallium/drivers/radeon/r600_buffer_common.c
> @@ -524,20 +524,23 @@ r600_alloc_buffer_struct(struct pipe_screen *screen,
>   
>   struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
>   					 const struct pipe_resource *templ,
>   					 unsigned alignment)
>   {
>   	struct r600_common_screen *rscreen = (struct r600_common_screen*)screen;
>   	struct r600_resource *rbuffer = r600_alloc_buffer_struct(screen, templ);
>   
>   	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;
>   	}
>   	return &rbuffer->b.b;
>   }
>   
>   struct pipe_resource *r600_aligned_buffer_create(struct pipe_screen *screen,
>   						 unsigned bind,
>   						 unsigned usage,
> diff --git a/src/gallium/drivers/radeon/radeon_video.c b/src/gallium/drivers/radeon/radeon_video.c
> index d7c5a16..de8e11c 100644
> --- a/src/gallium/drivers/radeon/radeon_video.c
> +++ b/src/gallium/drivers/radeon/radeon_video.c
> @@ -59,22 +59,28 @@ unsigned rvid_alloc_stream_handle()
>   	stream_handle ^= ++counter;
>   	return stream_handle;
>   }
>   
>   /* create a buffer in the winsys */
>   bool rvid_create_buffer(struct pipe_screen *screen, struct rvid_buffer *buffer,
>   			unsigned size, unsigned usage)
>   {
>   	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;
>   }
>   
>   /* destroy a buffer */
>   void rvid_destroy_buffer(struct rvid_buffer *buffer)
>   {
>   	r600_resource_reference(&buffer->res, NULL);
>   }
>   




More information about the mesa-dev mailing list