summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <[email protected]>2017-12-18 20:33:07 +0100
committerBas Nieuwenhuizen <[email protected]>2017-12-18 22:13:31 +0100
commitb98bbdf4906882f056478d7b99c1959081f46490 (patch)
tree0005135797fd78b8d9d8afd58e5be226ee850eca
parentdd517ad96d1ca53ba8912c8d6fd78b89e6948f23 (diff)
radv/amdgpu: wrap sync fd import/export.
Reviewed-by: Dave Airlie <[email protected]>
-rw-r--r--src/amd/vulkan/radv_radeon_winsys.h5
-rw-r--r--src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c21
2 files changed, 26 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h
index e851c3edf86..45f58f063a4 100644
--- a/src/amd/vulkan/radv_radeon_winsys.h
+++ b/src/amd/vulkan/radv_radeon_winsys.h
@@ -281,6 +281,11 @@ struct radeon_winsys {
int (*export_syncobj)(struct radeon_winsys *ws, uint32_t syncobj, int *fd);
int (*import_syncobj)(struct radeon_winsys *ws, int fd, uint32_t *syncobj);
+ int (*export_syncobj_to_sync_file)(struct radeon_winsys *ws, uint32_t syncobj, int *fd);
+
+ /* Note that this, unlike the normal import, uses an existing syncobj. */
+ int (*import_syncobj_from_sync_file)(struct radeon_winsys *ws, uint32_t syncobj, int fd);
+
};
static inline void radeon_emit(struct radeon_winsys_cs *cs, uint32_t value)
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index e4d444b8524..4578a9b5484 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -1336,6 +1336,25 @@ static int radv_amdgpu_import_syncobj(struct radeon_winsys *_ws,
return amdgpu_cs_import_syncobj(ws->dev, fd, syncobj);
}
+
+static int radv_amdgpu_export_syncobj_to_sync_file(struct radeon_winsys *_ws,
+ uint32_t syncobj,
+ int *fd)
+{
+ struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
+
+ return amdgpu_cs_syncobj_export_sync_file(ws->dev, syncobj, fd);
+}
+
+static int radv_amdgpu_import_syncobj_from_sync_file(struct radeon_winsys *_ws,
+ uint32_t syncobj,
+ int fd)
+{
+ struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
+
+ return amdgpu_cs_syncobj_import_sync_file(ws->dev, syncobj, fd);
+}
+
void radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws)
{
ws->base.ctx_create = radv_amdgpu_ctx_create;
@@ -1361,5 +1380,7 @@ void radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws)
ws->base.wait_syncobj = radv_amdgpu_wait_syncobj;
ws->base.export_syncobj = radv_amdgpu_export_syncobj;
ws->base.import_syncobj = radv_amdgpu_import_syncobj;
+ ws->base.export_syncobj_to_sync_file = radv_amdgpu_export_syncobj_to_sync_file;
+ ws->base.import_syncobj_from_sync_file = radv_amdgpu_import_syncobj_from_sync_file;
ws->base.fence_wait = radv_amdgpu_fence_wait;
}