diff --git a/src/gallium/frontends/va/buffer.c b/src/gallium/frontends/va/buffer.c index 6a8ca44534c..6d40addc575 100644 --- a/src/gallium/frontends/va/buffer.c +++ b/src/gallium/frontends/va/buffer.c @@ -131,6 +131,7 @@ vlVaMapBuffer(VADriverContextP ctx, VABufferID buf_id, void **pbuff) if (buf->derived_surface.resource) { struct pipe_resource *resource; struct pipe_box box; + unsigned usage; void *(*map_func)(struct pipe_context *, struct pipe_resource *resource, unsigned level, @@ -149,9 +150,19 @@ vlVaMapBuffer(VADriverContextP ctx, VABufferID buf_id, void **pbuff) else map_func = drv->pipe->texture_map; - *pbuff = map_func(drv->pipe, resource, 0, - buf->type == VAEncCodedBufferType ? - PIPE_MAP_READ : PIPE_MAP_WRITE, + switch (buf->type) { + case VAEncCodedBufferType: + usage = PIPE_MAP_READ; + break; + case VAImageBufferType: + usage = PIPE_MAP_READ_WRITE; + break; + default: + usage = PIPE_MAP_WRITE; + break; + } + + *pbuff = map_func(drv->pipe, resource, 0, usage, &box, &buf->derived_surface.transfer); mtx_unlock(&drv->mutex);