summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/virgl/virgl_resource.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c
index 6e3ff80e9e4..461c1768ed8 100644
--- a/src/gallium/drivers/virgl/virgl_resource.c
+++ b/src/gallium/drivers/virgl/virgl_resource.c
@@ -493,6 +493,18 @@ virgl_resource_transfer_map(struct pipe_context *ctx,
/* Multisampled resources require resolve before mapping. */
assert(resource->nr_samples <= 1);
+ /* If virgl resource was created using persistence and coherency flags,
+ * then its memory mapping can be only made in accordance to these
+ * flags. We record the "usage" flags in struct virgl_transfer and
+ * then virgl_buffer_transfer_unmap() uses them to differentiate
+ * unmapping of a host blob resource from guest.
+ */
+ if (resource->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT)
+ usage |= PIPE_MAP_PERSISTENT;
+
+ if (resource->flags & PIPE_RESOURCE_FLAG_MAP_COHERENT)
+ usage |= PIPE_MAP_COHERENT;
+
trans = virgl_resource_create_transfer(vctx, resource,
&vres->metadata, level, usage, box);