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,
else
map_func = drv->pipe->texture_map;
- 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,
+ /* For VAImageBufferType, use PIPE_MAP_WRITE for now,
+ * PIPE_MAP_READ_WRITE degradate perf with two copies when map/unmap. */
+ *pbuff = map_func(drv->pipe, resource, 0,
+ buf->type == VAEncCodedBufferType ?
+ PIPE_MAP_READ : PIPE_MAP_WRITE,
&box, &buf->derived_surface.transfer);
mtx_unlock(&drv->mutex);