[Mesa-stable] [PATCH] st/va: use pipe transfer_map to upload mapped buffer
Leo Liu
leo.liu at amd.com
Wed Sep 27 12:53:10 UTC 2017
On 2017-09-27 04:30 AM, Marek Olšák wrote:
> Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Thanks for the review.
>
> If a 3D or array texture can't occur here, it would be better to set
> box.depth = 1.
The case here is to map a derived image, which is a RGB surface with
format "PIPE_FORMAT_B8G8R8X8_UNORM", and the depth is set to 1, when
allocating.
so the resource->depth0 can address that.
For the array texture case like interlaced NV12 surface will not get
here, because this is not supported by vaDeriveImage, and it goes to
vaCreateImage and vaGetImage path.
Leo
> If a 3D texture can't occur here but an array texture
> can, it needs to be box.depth = resource->array_size.
>
> Marek
>
> On Tue, Sep 26, 2017 at 5:04 PM, Leo Liu <leo.liu at amd.com> wrote:
>> The function pipe_buffer_map() is only for linear pipe buffer,
>> with height as 0, and it's not for any 2D textures.
>>
>> Signed-off-by: Leo Liu <leo.liu at amd.com>
>> Cc: mesa-stable at lists.freedesktop.org
>> Cc: Mark Thompson <sw at jkqxz.net>
>> ---
>> src/gallium/state_trackers/va/buffer.c | 12 +++++++++---
>> 1 file changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/gallium/state_trackers/va/buffer.c b/src/gallium/state_trackers/va/buffer.c
>> index fb5b20e44b..deaeb1939f 100644
>> --- a/src/gallium/state_trackers/va/buffer.c
>> +++ b/src/gallium/state_trackers/va/buffer.c
>> @@ -125,9 +125,15 @@ vlVaMapBuffer(VADriverContextP ctx, VABufferID buf_id, void **pbuff)
>> }
>>
>> if (buf->derived_surface.resource) {
>> - *pbuff = pipe_buffer_map(drv->pipe, buf->derived_surface.resource,
>> - PIPE_TRANSFER_WRITE,
>> - &buf->derived_surface.transfer);
>> + struct pipe_resource *resource;
>> + struct pipe_box box = {};
>> +
>> + resource = buf->derived_surface.resource;
>> + box.width = resource->width0;
>> + box.height = resource->height0;
>> + box.depth = resource->depth0;
>> + *pbuff = drv->pipe->transfer_map(drv->pipe, resource, 0, PIPE_TRANSFER_WRITE,
>> + &box, &buf->derived_surface.transfer);
>> mtx_unlock(&drv->mutex);
>>
>> if (!buf->derived_surface.transfer || !*pbuff)
>> --
>> 2.11.0
>>
>> _______________________________________________
>> mesa-stable mailing list
>> mesa-stable at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-stable
More information about the mesa-stable
mailing list